暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

STM32软件环境搭建及开发1

ta是一个搬运工 2021-07-29
502

1 获取软件和工具

1.1 Keil uVision5 IDE

可在官网获取最新版本或者在百度网盘获取笔者使用的版本(uVision V5.23.0.0)。

链接:https://pan.baidu.com/s/1sJUj7l0yCmke7_ipqnxrVA

提取码:1m6r

1.2 STM32CubeMX

可在官网获取最新版本或者在百度网盘获取笔者使用的版本(4.22.0)。

1.3 Keil uVision5注册

安装好uVision5之后可以编译小于5K大小的可执行程序,超过5K需要注册才能编译成功。

以管理员方式打开uVsionFile->Liscense Management,以管理员方式打开注册机软件,将uVision中的CID拷贝到注册机的CID一栏,注册机的Target一栏选择ARM,点击注册机上Generate会生成一串字符串(LIC),将该字符串拷贝到uVision中的 New License ID Code(LIC):一栏并点击Add LIC,如果底部内容框显示LIC Added Successfully则表示注册成功,此时可以编译超过限定大小(5K)的可执行程序。

1.4 ST-Link V2

ST-Link V2相关使用,

参考网站:

https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html

参考文档:

UM1075/ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32 User manual

连接方式(SWD):

使用4个端口:1-电源,7-SWDIO9-SWCLK20-

2 调试程序

2.1 程序下载

在烧录程序之前需要导入设备描述文件给IDE,否则会出现“Cannot load flash Device description”的错误。按照如下步骤,点击下面的图标,

将对应的单片机描述添加进去,记得按下“确定”保存更改。

 

使用STM32CubeMX生成Keil项目代码,编译代码,

代码编译通过之后,通过如下设置,

代码能编译通过,调试选项设置正确之后即可下载程序到板端Flash

下载成功即板端Flash有用户程序,下次上电则会直接执行该用户程序。

 

代码能编译通过,调试选项设置正确之后也可以选择在线调试,

此时用户程序会下载到板端Flash,并且板端会自动重启并停止调试起点处。

2.2 查看main函数中的局部变量

如图,main函数中有局部变量cyl_cnt2,通过右键选择该变量的方式添加该变量到Watch1,即可实时查看该变量。

Watch1窗口默认在Keil的右下角显示,如果没看到可在菜单栏View->Watch Windows->Watch1打开。

 

如果在main函数中定义一个变量调试程序查看那个变量的值,Watchx(x=1或者x=2)总是显示not in scope。该问题主要是由于编译器优化了我们的程序代码。有两种解决办法,1:把变量定义为一个全局变量,2:将编译器优化等级修改为0

2.3 查看内存内容

菜单栏->View->Symbols Window->找到指定的变量->右键选中变量->增加变量到Memoryx(x[1,4])即可在memory watchs窗口(一般在keil软件的右下角,跟watchx(x[1,2])同一栏))中看到内存内容。

如果一个字符数组变量的内容太长,在watch窗口中会显示不全,此时可以将变量添加到memory窗口,通过右键更改显示选项为Ascii,此时就会以字符串形式显示变量的内容。

 

可以设置断点,程序停止断点处时可以查看当前调用栈,一般在keil的右下角,与watchx(x[1,2])同一栏,如果没有则可以通过菜单栏->View->Call Stack Window调出该窗口。

2.4 清除断点及watch列表

Command栏目中敲入BK *即可清除所有断点,WK 1/2即可清除watch 1或者watch 2

2.6 生成bin文件

keil提供了生成hex文件的勾选项(在Options for Target->Output中),但没有提供生成bin文件的勾选项,需要用户添加预定义命令生成,在预定义命令栏中输入“fromelf --bin --output=@L.bin !L”即可。如下图所示,

2.7 断点太多导致调试时启动出现异常

SW调试方式,在调试时一次创建了5个以上的断点,当次调试没有问题,下次想继续调试则出现启动异常,将断点删除之后就没有出现类似的问题。

2.8 生成预编译文件查看预编译变量

有时软件版本日期直接使用__DATE____TIME__这样的预编译变量,或者想看看程序的文件包含路径等等,需要生成预编译文件协助查看。Options fot Target xxx->Listing->勾选C Preprocessor Listing: *.i,此时重新编译,可以看到项目文件夹下有所有源文件的预编译文件。

2.9 使用多个ST Link仿真器

如果是使用keil软件烧录程序,则Options for Target XXX -> Debug -> 选中ST-Link Debugger -> Settings -> Debug -> Debug Adapter -> unit下拉列表中会枚举出当前识别到的多个仿真器,选中需要的那个即可。

如果是使用STM32 ST-LINK Utility烧录程序,则Target -> Settings -> Serial Number ->在下拉列表中会枚举出当前识别到的多个仿真器,选中需要的那个即可。

2.10 在调试过程中IDE报错

板端有继电器,在开关继电器时会出现IDE报错的情况,认为是继电器断开和闭合时SWDIOSWCLK受到干扰所导致,最初的调试接口电路图如下:

修改后的调试接口电路图如下:

修改后的电路开关继电器时不会出现IDE报错,参考ST官方文档:


文章转载自ta是一个搬运工,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论