STM32F4学习笔记(基础介绍篇)
这⾥我们学习的开发板芯⽚具体型号是STM32F407ZGT6,采⽤⼯作频率为168 MHz的Cortex™-M4内核,性能较强。
本篇包含的内容:
1. 固件库简介
2. 开发环境的简介
3. 开发板的基础知识
⼀、固件库的介绍:
前⾔: 在51单⽚机中,我们经常是直接操作 寄存器:
P0=0x11; //通过16进制数赋值0,1直接设置寄存器每⼀位开启关闭
在STM32中,⾯对⼤量的寄存器,很难全部记住并通过直接赋值来操作,开发效率太低且维护起来很⿇烦,于是可以通过函数的⽅式将对寄存器的操作封装起来,我们⼤多数时候只需要使⽤函数调⽤接⼝(AP
I):
/**库函数控制电平的翻转
*void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
*{
* GPIO->BSRRL = GPIO_Pin; //实际上还是控制寄存器,可以⾃⾏查询源码
*}
*/
//我们控制BSRRL寄存器实现电平控制只需要如下操作:
GPIO_SetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10,拉⾼电平表⽰灯灭
CMSIS标准:
上⾯我们得知,固件库的存在实际上在⼀定程度上使得硬件与软件相分离,如果对于不同的硬件我们都
使⽤同⼀个标准(⽐如,规范统⼀的命名,相同的结构层次)就能够实现较好的软件可移植性或者实现较好的兼容性。
arm公司为实现不同芯⽚公司⽣产的Cortex-M4芯⽚软件上的兼容,提出了CMSIS标准(Cortex Microcontroller Software Interface Standard)。可以简单理解为为了实现接⼝的规范统⼀。
以后我们还会知道其他如HAL、LL库等的使⽤,基本概念原理是⼀样的,此处不做讲解。
STM32官⽅固件库讲解:
在⼀个⼯程中,固件库之间的相互关系如下图:
1、Application.c:也就是main.c,程序的主逻辑⽂件。
2、stm32f4xx.h:⽚上外设访问头⽂件,⾥⾯包含⼤量结构体和宏定义(寄存器定义声明及内存访问操作的封装)。
3、system_stm32f4xx.h:包含SystemInit()函数的声明,⽤于系统启动时调⽤来设置整个系统和总线时钟。
4、stm32f4xx_it.c:编写中断服务函数,当然也可以将其编写在其他⽂件中⽐如各个硬件的驱动⽂件⾥⾯。
5、stm32f4xx_conf.h:外设驱动配置⽂件,可以根据需要include相关的外设头⽂件。
6、启动⽂件(startup_stm32f40_41xxx.s):堆栈的初始化、中断向量表以及中断函数定义。
(加粗部分为我们经常需要打交道的地⽅)
⼆、开发环境的简介
前⾔: 我们使⽤进⾏软件的开发:
软件的组成结构如下:
⼀般来说,第⼀次打开软件表观认识最多的应该是IDE Editer也就是代码编辑界⾯,其次如果⾸次使⽤某款芯⽚,会提⽰安装相关⽀持库,会使⽤到包安装器,对于软件其他部分可以在使⽤中慢慢感受(只需要明⽩MDK5不是简单的代码编辑器⽽已,是⼀个软件集合)。
1、⼯程模板的建⽴:
⼯程模板的建⽴是为了代码组织的清晰以及软件维护的⽅便。system的头文件
我们先看下ST官⽅库给出的⼯程模板包含的⽂件
- Template/system_stm32f4xx.c STM32F4xx 系统时钟配置⽂件
- Template/stm32f4xx_conf.h 固件库配置⽂件
- Template/stm32f4xx_it.c 中断处理⽂件
- Template/stm32f4xx_it.h 中断处理头⽂件
- Template/main.c Main program
- Template/main.h Main program header file
我们观察下对应⼯程模板在MDK5上的头⽂件路径设置:
第⼀步就是要搞明⽩,⼀个⼯程包含使⽤了哪些⽂件,我们对这些⽂件分类管理,创建出属于⾃⼰的⼯程模板。通过对⽐正点原⼦、st官⽅模板、cubeMx创建的模板,可以知道,完整的⼯程需要:
1、core_cm4.h //内核功能的定义,⽐如NVIC相关寄存器的结构体和Systick配置;
2、core_cm4_simd.h //包含与编译器相关的处理
3、core_cmFunc.h //内核核⼼功能接⼝头⽂件
4、core_cmInstr.h //包含⼀些内核核⼼专⽤指令
5、startup_stm32f40_41xxx.s //devices vector table for MDK-ARM toolchain
6、stm32f4xx.h //contains all the peripheral register's definitions, bits definitions
//and memory mapping for STM32F4xx devices
7、system_stm32f4xx.c //contains the system clock configuration for STM32F4xx devices,
//关键函数SystemInit(),系统启动⽂件startup_stm32f40_41xxx.s⾥⾯调⽤
8、stm32f4xx_conf.h //⾥⾯包含了我们需要使⽤的标准库,对于需要使⽤的库需要在其中加以说明include,
//stm32f4xx.h⾥⾯可以看到对其include
9、stm32f4xx_it.c //provides template for all exceptions handler and
// peripherals interrupt service routine.
10、main.c //主程序
11、led.c //对于关键使⽤硬件的驱动配置⽂件
对此我们对上⾯的⽂件分类存放管理:
我们创建这样⼀个⽬录结构后,导⼊相关⽂件,使⽤MDK5以该⽂件夹创建⼯程,然后将相关头⽂件路径进⾏设置好,⼀个⼯程模板就完成了(⾃⼰最好到⼀个⼯程模板,将上述⽂件到,并理清各个⽂件间的调⽤关系)。
2、程序的下载调试:
程序的下载⽅式:USB、串⼝(通常使⽤USB转成串⼝)、JTAG、SWD等。
使⽤串⼝下载时,⾸先需要电脑安装相关的驱动(CH340驱动),然后使⽤flymcu选择相关hex⽂件下载到开发板中。
使⽤JLINK下载:串⼝下载较为缓慢(每次都要全⽚擦除)且不能使⽤调试⼯具实时跟踪调试,使⽤JLINK、ULINK、STLINK等可以快速下载并实现程序跟踪调试。使⽤JLINK下载调试时需要注意设置为SW调试模式(JTAG模式会占⽤较多I/O⼝使得部分外设⽆法使⽤),相关驱动的安装不做详述。
程序的调试:
(注意:开发板上B0与B1要设置到GND以便代码下载后⾃动运⾏)
按下debug键进⼊仿真调试模式(Load键会直接下载执⾏⽽不进⼊调试模式)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论