一、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);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);
HAL_Delay(500);
如下图所示,注意要插入到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
|