目录
一、STM32的开发环境的搭建
1.安装jdk环境
a) 安装
由于STM32CubeMX是Java实现的,需要安装jdk环境;
下载链接:Java Downloads
打开exe,进入安装:
选择安装位置,点击下一步继续;
点击关闭,完成安装。
b) 配置
- 首先通过以下路径进入环境变量:
计算机→属性→高级系统设置→环境变量
- 新建系统变量:
第一个变量名为JAVA_HOME
变量值为安装jkd的目录,我的是C:\Program Files\Java\jdk-17.0.1
第二个变量名为:CLASSPATH
变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
(注意最前面的点不可省略)
第三个变量是修改Path
变量:
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
再点击确定,关闭窗口。 - 验证java是否配置成功:
使用键盘上的win+R, 输入cmd
输入java -version
, 注意中间有空格;
显示版本信息即为安装成功。
2.安装STM32CubeMX
a) 软件下载
这里会跳出一个窗口,要求注册账号,填写有效的邮箱地址;
进入邮箱,打开邮件中的下载链接即可下载软件。
b) 安装
以管理员身份运行安装下载的exe应用程序;
点击Next继续;
勾选"I accept …",点击Next继续;
再勾选下面两个权限,点击Next继续;
选择安装位置,注意路径中不要出现中文,默认地址在C盘,点击确定继续;
直接点击Next继续;
进入安装;
安装进程Finished;
点击Done,完成安装。
3.安装固件库
运行STM32CubeMX程序,在窗口Help
中选择Manage embedded software packages
安装固件库;
根据自己的芯片类型,选择一个固件库,点击下方的Install Now
直接下载安装,也可以使用From Local…进行下载,表示从本地安装,前提是已经在本地下载了对应的固件库;
进入下载页面;
下载完成后,前面的框显示为绿色;
固件库便安装完成。
4.安装MDK5软件
我的设备已安装过Keil,如有需要可参考链接:
如何开始一个stm32的简单程序的编译
注意:安装过程结束后,要安装对应的固件库才能够做对应STM32的开发。
二、利用工具生成点亮LED灯的代码
1、打开STMCubeMX,点击ACCESS TO MCU SELECTOR
创建新项目;
下载必要的文件;
2、进入主页面,在Part Number
处选择芯片,这里以STMC8T6为例,然后点击下方一栏,会出现的一列芯片的信息,再点击Start Project;
3、点击System Core
,选择SYS
,在Debug处选择Serial Wire
;
4、再选择RCC配置时钟,可以看到有两个时钟,分别是HES和LSE。
我们采用是GPIO接口,而这些接口都在APB2里;
点击Clock Configuration
观察时钟架构,可以看见APB2总线的时钟由HES控制,同时把中间的PLLCLK
选上;
所以回到第一个页面,将HSE设为Crystal/Ceramic Resonator
,勾选后RCC前面也会自动勾选上;
5、接下来设置输出寄存器,选择进入GPIO
界面,点击相应的引脚,选择GPIO_Output
;
这里选了三个,分别是PA4,PB10,PC14;
在左边可以看到添加的三个引脚,并修改参数Maximun output speed 为Medium
,然后在User Label处添加引脚标签
;
6、点击上方的Project Manager
,在Project页面,配置好项目名称
和路径
,然后修改Toolchain/IDE为MDK-ARM
,版本根据自己的设备选择;
注意路径中不能含有中文,否则后面生成的文件不全。
7、再点击进入Code Generate界面,在Generated files勾选Generate peripheral initialization as a pair of '.c/.h' files per peripheral
生成初始化.c/.h文件;
8、最后点击右上方的GENERATE CODE
,即可生成代码;
点击Open Project便可直接进入工程。
三、MDK5生成.hex文件
3.1 在main函数中插入代码
继续上面的操作,进入工程后,通过目录找到并打开main.c
文件,找到主函数int main(void)
的部分;
/* USER CODE BEGIN /
用户代码
/ USER CODE END*/
如果要在STM32CubeMX生成的工程中添加代码,要在提示 /* USER CODE BEGIN* /和/* USER CODE END*/之间添加代码,这样STM32CubeMX重新生成代码时才不会将自己添加的代码删除掉。
此外,注意使用CubeMX配置生成的工程中的注释最好不要随便删除掉。
在while循环
的 /* USER CODE BEGIN 3 / 下面插入以下代码:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯
HAL_Delay(500);//延时0.5s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
HAL_Delay(500);//延时0.5s
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);//PB10亮灯
HAL_Delay(500);//延时0.5s
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);//PB10熄灯
HAL_Delay(500);//延时0.5s
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//PC14亮灯
HAL_Delay(500);//延时0.5s
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC14熄灯
HAL_Delay(500);//延时0.5s
如下图所示,注意要插入到while函数的括号范围内;
3.2 调试编译
编译程序,无报错且生成相应的.axf文件;
在文件夹LED_test中,可找到生成的.hex文件;
四、程序烧录
烧录过程的操作和软件下载可参考我的上一篇博文:
使用STM32寄存器点亮LED流水灯
五、运行结果
面包板工作如下,LED三色灯正常亮灯,间隔闪烁。
六、MDK5模拟示波器
在没有示波器条件下,可以使用MDK5的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点,因此可以用MDK5的软件仿真观察3个GPIO端口的输出波形。
6.1 配置工程
点击魔术棒进入工程配置,首先在Target窗口,设置晶振为8MHz;
配置Debug:
1、勾选Use Simulator
;
2、勾选Run to main
;
3、修改左边的Dialog.DLL为DARMSTM.DLL
;
4、修改右边的Dialog.DLL为TARMSTM.DLL
;
5、修改两边的Parameter为-pSTM32F103C8
;
DARMSTM.DLL和TARMSTM.DLL在STM32的单片机中应该都是固定的;
Paramter是根据采用的具体芯片,应与Target中STMicroelectronics 保持一致。
6.2 调试观察
1、点击窗口右上角的Start Debug Session
进行仿真调试;
2、调试后,选择逻辑分析仪Logic Analyer
;
3、选择要观察的引脚:
点击Setup Logic Analyzer
;
添加要观察的引脚;
如PA4可直接输入PORTA.4;
图中选择的三个引脚分别是PA4、PB10和PC14,GPIOA对应的为PORTA,那么GPIOB对应的也应该写成PORTB,以此类推。其中PORTA & 0x00001000后再右移4位也就把PA4的状态获取出来,1是高电平,0是低电平。PB10和PC14同理。
选择Bit,便于观察波形;
颜色是为了区分不同的引脚,根据需要配置即可。
注意:如果上述步骤中Debug没有正确修改正配置,那么在添加引脚的时候就会出现Unknown Signal 的报错
4、运行程序;
5、观察波形,把光标移动到逻辑分析仪显示波形的区域,上下滚动滑轮,就可以放大和缩小波形,即可观察各个引脚的波形图;
七、总结
本次实验安装了两个软件jkd和Cube,配置后使用Cube自动生成代码,再烧录到硬件上,体会到了使用工具的便捷性,且大大提高了工作效率,若是熟悉操作更能在高效下保证代码的准确性。通过逻辑分析仪代替示波器,更能在仿真出现问题时,定位到问题所在,再逐步解决!
八、参考文献
1 .搭建STM32开发环境——STM32CubeMX,Keil5
2.STM32实现LED闪烁——基于HAL库
3.基于 MDK 创建 STM32 汇编程序:串口输出 Hello world