目录
Preface:
Hardware-Configuration & Software-Environment:
(一)新建项目工程
(二)工程配置
(三)配置外设
(四)项目管理
(五)Clion相关配置
呃,首先说点题外话。记得第一次听说stm32这个东西的时候还是在2021年12月左右,当时刚刚自学完了51单片机,参加了个小比赛。然后一个偶然的机会,拿(白嫖)到了一块stm32f4的最小系统板,然后对着某原子的“stm32f4单片机新建工程模板.pdf”捣鼓了一个下午,终于点亮了一颗LED。。后来想去b站找教程,我记得有个up讲51讲得很好(好像叫什么江科大?),但是当时他的stm32版本才只有几集。。。没办法,只能去看某原子的视频教程了,但是那视频质量我只能说懂得都得,然后我又摸了2个月,直到2022年1月又重新从头开始学。但是对当时的我来说,f4实在是太难了,所以就去学了f1,后面也是磕磕绊绊,学习了许许多多的东西。。。一开始还是学的标准库,毕竟那时候网上大多数教程都是用的标准库吧,标准库稳定是稳定,但是代码初始化的过程实在是有一丢丢复杂,我记得当时初始化外设的时候经常漏步骤。
然后就大概学了半年的标准库,就接触到了HAL库,就是用cubemx来生成代码,初始化的步骤直接变成了图形化界面,瞬间觉得舒服多了,直到现在也是一直在用cubemx,标准库已经在我的工程中消失了hhh(但是还是能用滴,比如说别人的工程用的是标准库,那就只能跟着来用,或者花多点时间移植到HAL库。。)
写代码的话,老牌的Keil当然是大家入门首选,据说全球有一半以上的MCU都用Keil来开发,可见它有多牛b了,它的调试功能打爆一切对手(个人看法),而Keil作为一个上世纪的产物,虽然现在也在逐步更新,但是它的代码编辑功能真的是一言难尽。刚开始学的时候还是用的Keil,后面就上了vscode的keil-assistant插件+Keil配合使用,vscode负责编辑,keil负责调试,非常好用,谁用谁知道~~~再后来也用过了stm32cubeide,但是个人感觉跟vscode差别不是很大。再后来(直到现在),用的是大佬们用过的CLion+stm32cubemx,用cubemx生成代码,用clion编制+调试,而且clion代码提示能力真的是非常给力,虽然说调试功能可能比不太上keil(maybe),但是个人感觉这点牺牲是值得的。。。当然这个复习笔记里面不会说到环境、工具链配置,网上很多大佬都有写。。。
最重要的是,从来没有做过一个复习计划,突然就心血来潮想做一个,毕竟后面可能没有这么空闲的时间来整体复习一下stm32了(当然复习笔记只是写给自己看的,以后要是忘了还能回来看~)ok废话不多说,直接开冲
普中-天马F407开发板(主控芯片:STM32F407ZGT6),STLink-V2调试器
STM32CUBEMX版本:v6.9.1
STM32F4 HAL库版本:1.27.1
CLion版本:2023.2
编译器:gcc-arm-none-eabi-10.3-2021.10-win32、MinGW 64
调试器:OpenOCD-20230621-0.12.0
首先打开clion,找到embedded并选cubemx,然后选择文件路径,最后新建工程:
新建成功之后会弹出下图界面让你选板子配置文件(主要是配置下载、调试的),这里先不选,后面再慢慢选 :
然后,等右下角进度条跑完,在当前页面打开cubemx(没有设置配置文件的话,默认是帮你选好stm32f030f4p6,这个可以进到cubemx里面改):
打开cubemx后,点左上角的stm32f030f4p6,进去修改芯片,选择stm32f407zgt6即可:
对于左边这一列,从上到下依次为:系统内核、模拟、定时器、通信接口、多媒体接口、安全、计算、中间件和软件包;系统内核里面有:DMA(直接存储器存取)、GPIO(通用IO)、IWDG(独立看门狗)、NVIC(嵌套向量中断控制)、RCC(复位和时钟控制)、SYS(系统配置)、WWDG(窗口看门狗);模拟里面有:ADC(模数转换)、DAC(数模转换);定时器里面有:RTC(实时时钟)、TIM1~14(定时器,其中TIM1和TIM8是高级定时器,TIM6和TIM7是基础定时器,其余都是通用定时器);通信接口里面有:CAN(can总线)、ETH(以太网)、FSMC(可变静态存储控制器)、I2C(iic总线)、SDIO(sd卡用)、SPI(串行外设总线)、UART(通用异步串口)、USART(通用同步异步串口)、USB_OTG_FS & USB_OTG_HS(USB总线相关);多媒体接口里面有:DCMI(数字摄像头接口)、I2S(音频接口);安全里面有:RNG(随机数生成器);计算里面有:CRC(循环冗余校验);中间件和软件包里面东西非常非常多,这里只说一些我用过的(没用过也不懂,,,):FATFS(文件分配表类型的文件系统FAT-FS)、FREERTOS(开源、免费的实时操作系统freertos)、X-CUBE-AL(stm32的ai部署软件,对模型数据进行剪枝、压缩,实现边缘计算)、X-CUBE-TOUCHGFX(stm32的GUI设计软件,用来设计图形界面)。
一打开cubemx,直奔system core中的SYS,配置调试接口,用来进行代码烧录下载、调试。Debug选择Serial Wire即可;System Wake-up是睡眠的时候唤醒所需要设置的,这里用不到就不用管;Timebase Sorece时基源默认选择SysTick系统滴答计时器即可,用以给HAL库提供标准时基,一般都不用管它,只有在使用操作系统的时候,操作系统默认使用SysTick,那么就要把此处的Timebase Sorece修改为任意一个计时器,因为HAL库的时基与操作系统的时基不同。。。不使用操作系统的时候直接就默认即可。
下一步,打开RCC,给系统配置晶振,HSE(外部高速时钟),LSE(外部低速时钟),Master Clock Out 1 & 2(主时钟输出,也就是单片机通过特定引脚输出时钟给外部)、I2S_CKIN(音频时钟输入,可以输入准确的时钟给I2S,也就是音频协议,能得到更高品质的音频)。HSE和LSE一般选Crystal/Ceramic Resonator(无源石英/陶瓷晶振)即可,HSE是给整个系统提供时钟的,而LSE只给RTC提供时钟(没用到RTC的话就不需要开启),一般HSE取4~25MHz,而LSE取32.768kHz,经过分频后得到准确得1Hz提供给RTC时钟;参数configuration保持默认即可:
下一步,进入时钟配置,主要配置时钟参数,如系统时钟,总线时钟等等;在HSE处根据实际情况输入晶振大小,我板子上的是8M,则输入8,然后HCLK输入168,直接最大频率(如果没有特别需求,比如说某个外设一定要多少频率,或者是要跑低功耗之类的特殊用途,一般系统时钟HCLK设置为最大就行),然后敲两下回车,再回去选择HSE,但是此时发现HCLK变了,那再改回168并回车即可设置成功。
第一个外设毫无疑问就是点灯啦!根据开发板原理图,
就能知道LED0和LED1分别连接在PF9和PF10引脚上,并且为低电平点亮;回到cubemx,因为芯片引脚比较多,所以使用搜索功能(右下角)搜索PF9(可以发现PF9一直在闪烁):
找到PF9后,左键单击点开,选择GPIO_OUTPUT输出功能,再右键单击,选择Enter User Label(输入用户标签),可以给引脚自定义名字,这里设置为LED0;PF10做相同的操作,并设置为LED1:
然后在左边System Core中找到GPIO,选择PF9(PF10一样),进行GPIO参数配置如下:
GPIO output level:GPIO输出电平,因为LED低电平点亮,所以先输出高让它灭,在需要时再点亮;GPIO mode:GPIO模式,选择推挽输出,增强驱动电流能力;GPIO Poll-up-Pull-down:GPIO上下拉,选择上拉,也就是空闲时候默认高电平;Maximum output speed:最大输出速度,速度越快,功耗越大,点灯这种不需要高速的操作就选low可以了。
进入Project Manger,首先,用Clion生成的项目保存的时候必须与Clion同名并且在同一个目录下才能被找到,IDE选STM32CubeIDE,堆、栈大小保持默认即可:
然后,文件生成勾选如图所示,生成每个外设对应的.c和.h文件,方便项目管理:
最后点击右上角生成代码,弹出提示框,选择yes同意覆盖,等待代码生成成功后,点close即可:
接下来进入clion中,依然选择跳过配置文件,稍后自己配置:
等待右下角进度条跑完,进入编辑界面:
接下来,配置编译器、调试器工具链(具体如何下载安装就不说了,主要是篇幅太长了,下载安装的话网上有许多教程可以去找); 左上角File->Setting->Toolchains,新建一个MinGW编译选项,Toolset选择MinGW,C Compiler(C编译器)选择arm-none-eabi-gcc.exe,C++ Compiler(C++编译器)选择arm-none-eabi-g++.exe,点击应用即可:
然后配置CMake(构建、编译、链接工具),工具链选择刚刚配置好的MinGW,名字任取,如下图:
最后,配置OpenOCD调试工具,点击下图中的配置,进入配置界面,点击左上角+号,往下找到OpenOCD并选择,然后需要选择板子的配置文件(这就是前面一直说的配置文件),再选择可执行的二进制文件,最后点击Apply+OK即可:
配置文件内容如下:
# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f4x.cfg]
# download speed = 10MHz
adapter speed 10000
然后点击右上角编译,等待编译成功:
然后输入点灯函数(tips:代码必须写在沙箱注释中,否则下次用cubemx生成代码的时候会被覆盖掉),编译:
最后点击下载,下载成功!可以看到板子上的灯如预期所亮:
还有调试功能也是杠杠的:
调试过程看外设寄存器的值,导入D:\Keil\Keil\STM32F4xx_DFP\2.17.0\CMSIS\SVD\STM32F407.svd文件(因为相关的配置信息在keil中已有,所以直接load进来即可):
工程链接:https://pan.baidu.com/s/1RTHqNqyEWAeSOndfi1BtNQ
提取码:0xFF
以上均为个人学习心得,如有错误,请不吝赐教~
THE END