Stm32学习笔记一:stm32cubemx和keil5从零开始点亮一个LED灯
一、软件材料准备:stm32cubemx和keil5软件(下载方式可自行上网搜,这里不再详细叙述)
二、硬件材料准备:stlink-v2调试器(我的情况是已经装了驱动了)、杜邦线、stm32系统板
驱动网盘资源:
链接:https://pan.baidu.com/s/10FtTg39yIyhGFC-pYrWgGg
提取码:b73k
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享
STLINK/V2在线编程/编程器是stm8/32的很好的开发工具之一,他可以使用单线接口模块SWIM(用于stm8)和JTAG/串行线调试接口SWD(用于stm32)与目标板通信。连接图如下:
上图中stlink的SWCLK与SWDIO分别与系统板的CLK与DIO连接
三、CubeMX的使用及初始化(我的情况是已经安装了,安装教程可在网上找到)
我当时的情况是好久没用cubemax了,进去之后各种配置好了后点击“generate code”时无法生成代码,keil5软件没有启动,软件提示如下的情况:
“The Firmware Package(STM32Cube_FW_F1_V1.8.0)or one of its dependencies requiredby the Project is not available in your STM32CubeMX Repository”
上网查了好久都没有找到解决的办法,不过找到一个类似的,经过他的启示,我发现是固件库的文件地址出现了乱码,然而修改了之后依旧没有成功,最后发现打开cubemx时它会弹出一个让我更新的窗口,里面有可以重新修改固件库的地址,修改之后再进到cubemx的“Project manager”窗口时再在这里修改固件库的地址才能成功。
当上面画圈的固件库地址不再乱码时就成功了
1、CubeMX的初始化
(1)RCC时钟的设置。
将RCC始终设置为“Crystal/ceramic Resonator(水晶/陶瓷谐振器)”
(2)调试配置
将SYS中的Debug设置成Serial Wire(串口线)
(3)时钟树配置
Stm32f103c8t6的最高频率为72MHz
按上图配置就行,其中PLL是锁相环的意思(数电学过)
(4)项目配置
上图中打勾的地方都要选上,最后点击“Generate code”就能打开keil5并生成代码了。
四、查看项目文件
1、.ioc文件
2、Driver文件夹
3、“MDK-ARM”文件夹是STM32CubeMX软件针对MDK-ARM集成开发环境生成的项目开发和调试的文件
4、“Inc”文件夹和“Src”文件夹
五、keil5的使用及项目组介绍
1、keil5常用功能
2、项目组介绍
(1)Application/MDK-ARM组
该组添加有“startup_stm32f103xb.s”文件。该文件提供了stm32f103c8t6的中断矢量列表,供MDK-ARM工具链调用。该文件在微控制器启动后会被调用,用于初始化sp(堆栈指针寄存器)寄存器和pc(程序计数器)寄存器,设置中断向量入口,并最终调用主函数。在该文件中,可以找到不同的中断服务函数的名称列表,如外设“USART1”的中断服务函数的名称为“USART1_IRQHandle”。
(2)Application/User组
该组的文件前面已介绍过,这里需要说明的是其中的main.c文件和stm32f1xx_it.c文件,我们可以将自行定义的程序代码添加到其中。
(3)Drivers/STM32F1XX_HAL_Driver组
该组包含的是相应的外设驱动源文件,也就是我们所说的HAL库文件。比如,当使用I/O口驱动外围电路时,需要使用里面的“stm32f1xx_hal_gpio.c”源文件。另外在使用gpio时,必须使能gpio的时钟,所以还需要使用里面的“stm32f1xx_hal_rcc.h”文件。
(6)Drivers/CMSIS组:添加有“system_stm32f1xx.c”源文件。该文件是Cortex-M0器件外设访问层系统源文件,用于系统时钟配置,主要用于定义系统时钟源以及低速,高速时钟总线的频率等。
3、烧写注意事项
注意:烧写时点击界面上的Dowmload后立马同时点击系统版的复位键,这样才能烧写成功
由于我的系统板上的led灯是连在PA1引脚的,所以我只需要设置PA1引脚的GPIO Output level为low低电平即可,“GPIO Mode”设置成Output push pull(推免输出),GPIO pull-up/pull down(有开关是才需要设置)设置成no pul up and no pull down。GPIO pull-up/pull down(有开关是才需要设置)设置成no pul up and no pull down。