一、STM32的开发环境的搭建
1.安装jdk环境
由于STM32CubeMX是Java实现的,需要安装jdk环境。
小编之前就已安装过jdk环境,安装过程便不做过多说明,就此提供一个jdk下载及安装教程参考链接:
https://blog.csdn.net/huxiansheng__/article/details/106601004
最后记得检验一下jdk环境是否配置成功:
Win+R
打开运行窗口,输入cmd
![在这里插入图片描述](https://img-blog.csdnimg.cn/66a0fe1daef040d4a80bd95636ce3ea9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_14,color_FFFFFF,t_70,g_se,x_16)
输入java -version
查看运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c16579ebd524c969fb7b5d2d4d05c5e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
若显示“不是内部或外部命令,也不是可运行的程序或批处理文件”,可能是配置环境变量过程中出现了问题,注意仔细看看。
2.安装STM32CubeMX
下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html
安装过程:
进入下载界面,根据自己的需要下载对应的版本
![在这里插入图片描述](https://img-blog.csdnimg.cn/490bba0bdb4f4582af71be6ab795f8db.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
找到下载路径,对下载的zip压缩包进行解压
![在这里插入图片描述](https://img-blog.csdnimg.cn/b2bafabd3a284004bc37aa2d7c982cd8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
进入解压到的文件夹,点击右键以管理员身份运行SetupSTM32CubeMX-6.3.0-Win.exe,进入到下面的界面,点击next
![在这里插入图片描述](https://img-blog.csdnimg.cn/9a84d83f2a914bd5a718bdceebdc96e2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
点击"I accept the terms of this license agreement",接着选择Next
![在这里插入图片描述](https://img-blog.csdnimg.cn/60c735f12ebe4b6a97cd297519f93a7f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
选择安装的位置,默认安装在C盘中(注意:安装位置不要出现中文),点击Next
![在这里插入图片描述](https://img-blog.csdnimg.cn/79b595a7870548218c03942f9dc0d932.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
点击确定
![](https://img-blog.csdnimg.cn/ae4bafa9c6be4ba188aae606a90cd0d6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
在跳出的页面,点击Next,进行安装
![在这里插入图片描述](https://img-blog.csdnimg.cn/554295bc154f4094b65069ad07384419.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
安装完成后,点击Next
![在这里插入图片描述](https://img-blog.csdnimg.cn/0ad90ebf61894d5eb46cab2361759407.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
点击Done就安装完成了
![在这里插入图片描述](https://img-blog.csdnimg.cn/21925821480740a48cab3cbd89ba6ccc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
3.安装固件库
运行STM32CubeMX程序,选择 Help
->Manage embedded software packages
安装固件库
![在这里插入图片描述](https://img-blog.csdnimg.cn/a709e7eb5f554f21ae2901f23d7c2d48.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
根据自己的芯片类型,选择一个固件库,点击下方的From Local...
进行下载,表示从本地安装(已经在本地下载了对应的固件库),Install now
是通过网络下载,我这里选择的是在线安装。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f5a38230b0df493791a29d189837a592.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
前面的框显示为绿色,表示下载成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/9e2c31d71c0143b29952825642bdc8f2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
4.安装MDK5软件
具体安装请参照下面链接:
https://blog.csdn.net/qq_43279579/article/details/108880667
注意:安装过程结束后,要安装对应的固件库才能够做对应STM32的开发。
二、利用工具生成点亮LED灯的代码
包下载好之后,回到home界面,点击ACCESS TO MCU SELECTOR
创建新项目
![在这里插入图片描述](https://img-blog.csdnimg.cn/1647369f09874de6954fc65f05894e45.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
在Part Number
处选择芯片,这里以STMC8T6为例,然后点击中间出现的一列芯片的信息,再点击Start Project
就行了
![在这里插入图片描述](https://img-blog.csdnimg.cn/01e8c59413bf4dffa1d77c2921025c51.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
点击System Core
,进入里面的SYS
,在debug那里选择Serial Wire
![在这里插入图片描述](https://img-blog.csdnimg.cn/c4279b8e713f43f9b8d2fa12632e793e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
接下来就是配置时钟了,进入上面的RCC
,有两个时钟,一个是HSE和LSE,我们要用是GPIO接口,而这些接口都在APB2里
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0637b0f9beb44d69e0567c954375690.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
接下来观察时钟架构,可以看见APB2总线的时钟由HSE控制,同时在这个界面得把PLLCLK
右边选上
![在这里插入图片描述](https://img-blog.csdnimg.cn/d7a60c9b37924ca79b52f8d053055a0f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
所以我们将HSE那里设为Crystal/Ceramic Resonator
就行了
![在这里插入图片描述](https://img-blog.csdnimg.cn/da258e1bbfd04474898332a72cfa1bbe.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
接下来就是设置输出寄存器,进入GPIO
界面,点击相应的引脚,选择GPIO_Output
![在这里插入图片描述](https://img-blog.csdnimg.cn/e9e68f018fb4461f8ea6c2c66d49efed.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
我这里一共选了三个,分别是PA4,PB10,PC14
![在这里插入图片描述](https://img-blog.csdnimg.cn/27e57041d4c44ddaa565b820e4f1f12f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
在左边的GPIO Mode and Configuration
下可以看到刚刚配置的三个引脚
![在这里插入图片描述](https://img-blog.csdnimg.cn/5094561511d845de977967b04cd0c006.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
依次选择PA4,PB10,PC14,将其配置为下图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/3f7b1516907046a1abaa89475f38050d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
在Project Manager
–>Project
下,配置好自己的项目名和路径,然后IDE那项改为MDK-ARM
,版本根据自己的需求选择
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2b68b987a5c4431b90ae98957ae49c0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
注意:
在创建文件位置时,不能不能不能有中文的路径文件名,包括要放置的目录下 ,所有都创建为英文,否则后面生成的文件不全(不要问为什么,问就是小编略有体会)
进入Code Generate
界面,勾选生成初始化.c/.h文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/32246ee9cf7b4672b6d2fa3589e0809e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
最后点击GENERATE CODE
,生成代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/ef83f0ee523b479e9bbf633fb36efb00.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
三、MDK5生成.hex文件
进入刚刚选择的路径,打开MDK-ARM
子文件夹,通过keil打开刚刚生成的项目
![在这里插入图片描述](https://img-blog.csdnimg.cn/bbba9fd0b7ef4226af1ed03cba9da75c.png)
通过目录找到并打开main.c
文件,找到主函数int main(void)
那一部分
![在这里插入图片描述](https://img-blog.csdnimg.cn/703bc4f656614323b765330c7f0e3e46.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
/* USER CODE BEGIN /
用户代码
/ USER CODE END*/
如果要在STM32CubeMX生成的工程中添加代码,要在提示 /* USER CODE BEGIN* /和/* USER CODE END*/之间添加代码,这样STM32CubeMX重新生成代码时才不会将自己添加的代码删除掉。此外,注意使用CubeMX配置生成的工程中的注释最好不要随便删除掉。
在while
循环的/* USER CODE BEGIN 3 /和/ USER CODE END 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
![在这里插入图片描述](https://img-blog.csdnimg.cn/a0c2ad68fed0482887427a381589a481.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
编译运行程序无报错且生成相应的.hex文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/a6fe24b0c8c546c395db83340bd7b2e0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
在文件夹MDK-ARM
下,打开与工程名相同的子文件夹可以看到生成的.hex文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ef31d1dc14a43abb84d5f8de2691684.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
四、程序烧录
烧录过程的操作和软件下载可参考链接:https://blog.csdn.net/qq_54496810/article/details/120777279
![在这里插入图片描述](https://img-blog.csdnimg.cn/21ef921409404347be48bab916e8c073.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
程序烧录成功。
五、运行结果
运行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2f7800dc64de4e3e829abc4a3d7f89e5.gif)
可以看见红、绿、黄LED灯间隔闪烁,实验成功。
六、MDK5模拟示波器
在没有示波器条件下,可以使用MDK5的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点,因此可以用MDK5的软件仿真观察3个GPIO端口的输出波形。
1.设置options for target
![在这里插入图片描述](https://img-blog.csdnimg.cn/a62de3c437ee4b6fb66632895516ea93.png)
Target
的设置:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ae5f160f020d453fa5fa0ffed93f8b72.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
Target界面中,选择正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。不过这个参数只在软件仿真中起作用,当程序在硬件中运行并没有影响。
Dubug
的设置:
![在这里插入图片描述](https://img-blog.csdnimg.cn/36cf00b6c9204f9c9da929e5a5bab412.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
首先应该选择Use Simulator
,其次是Run to main()
选项打√,然后分别修改上图中的 4和5处,注意,DARMSTM.DLL和TARMSTM.DLL在STM32的单片机中应该都是固定的,Paramter
是跟所采用的具体芯片是对应的,应与Target
中STMicroelectronics
保持一致。
2.参数设置完毕,点击Debug,进入调试界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/ad16a652bb094bf199d7073530dcbef2.png)
3.选择逻辑分析仪Logic Analyer
![在这里插入图片描述](https://img-blog.csdnimg.cn/ea72ab5a39be4eaf8834cc4ef15f5562.png)
4.选择要观察的引脚
①点击Setup Logic Analyzer
![在这里插入图片描述](https://img-blog.csdnimg.cn/16065806380f444aafcd491328e48d0b.png)
②添加要观察的引脚
![在这里插入图片描述](https://img-blog.csdnimg.cn/d528741efb23478b8861ee0691f915f1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_12,color_FFFFFF,t_70,g_se,x_16)
(引脚添加:如PA4可直接输入PORTA.4即可)
图中选择的三个引脚分别是PA4、PB10和PC14,GPIOA对应的为PORTA,那么GPIOB对应的也应该写成PORTB,以此类推。其中PORTA & 0x00001000后再右移4位也就把PA4的状态获取出来,1就是高电平,0就
是低电平。PB10和PC14同理。一定要选择Bit,颜色是为了区分不同的引脚,根据需要配置即可。设置完成后退
出,就可以在后续的操作中观察到波形。
注意:如果上述步骤1中的Debug中的4、5没有正确设置,那么在添加引脚的时候就会出现报错:Unknown Signal !
5.运行程序
![在这里插入图片描述](https://img-blog.csdnimg.cn/9a9b558e587e4dc18d79e53bff0b0278.png)
6.观察波形,把光标移动到逻辑分析仪显示波形的区域,上下滚动滑轮,就可以放大和缩小波形
![在这里插入图片描述](https://img-blog.csdnimg.cn/2893a75d9a5c45f0a3db4b2493deeedc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5bCP5pif5Lqu5pm25pm2,size_20,color_FFFFFF,t_70,g_se,x_16)
这样就可以直观的看出各个引脚的波形图,从而知道它们的区别。
七、小结
与前一次实验STM32F103寄存器方式点亮LED流水灯相比较,使用STM32CubeMX自动生成代码并点亮LED灯是非常简单的,通过这次实验,让我明白了合理使用工具的“快乐”,能使我们更快的编写代码,提高工作效率。
在过程中,遇到了代码没问题、接线也正确,但是最小系统板并没有正确执行程序这个问题,最后通过询问同学还是得以解决。
在日常工作中,逻辑分析仪和示波器是MCU工程师必不可少的工具,有时候程序有BUG的时候就需要用到这些工具看波形,从而更快地定位到问题所在,进而解决问题。另外除了成本外,我们也不可能时时刻刻把示波器带在身边,所以keil的软件仿真功能中的逻辑分析仪在这个时候就是一个不错的选择。
八、参考文献
1.https://blog.csdn.net/weixin_52288941/article/details/120841800?spm=1001.2014.3001.5501
2.https://blog.csdn.net/junseven164/article/details/120807138?spm=1001.2014.3001.5501