一、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
|