概述
1.stm32开发建议
stm32开发有很多种,比如使用寄存器开发,使用固件库(也称标准库)开发,还要的使用HAL库开发。这三种开发其实都是对寄存器进行操作,这个是本质,我们抓住本质去看问题,就会轻松很多。寄存器开发,和51开发差不多,自己对寄存器地址操作,但是寄存器也封装了一下,让开发者使用相对轻松一点。标准库是在寄存器基础进行封装,让开发者使用,管理起来更加方便,但是同样带来一个问题,对于新手不是很友好。HAL库是在标准库基础上再次封装,封装得更加抽象了,对新手也不是很友好。当然使用来说,标准库和HAL库都是很方便的,学起来相对容易,但是都是不知所以然的,很多人让他自己写就不会了,都是在别人的基础上进行开发,或者说遇到一些难题就不行了,当然不排除学得好的大佬。
2.程序运转流程
首先是启动文件,名为“startup_stm32f10x_hd.s”的文件(怎么选择是根据芯片型号选择的,这些都是ST公司提供的,我们可以在此基础上进行二次开发),它里边使用汇编语言写好了基本程序,当STM32 芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起C 语言的运行环境,所以我们把这个文件称为启动文件。该文件使用的汇编指令是Cortex-M3 内核支持的指令,可参考《Cortex-M3 权威指南》中指令集章节
文件:
startup_stm32f10x_ld.s
startup_stm32f10x_md.s
startup_stm32f10x_hd.s
其中,ld.s 适用于小容量 产品;md.s 适用于中等容量产品;hd.s 适用于大容量产品;
这里的容量是指 FLASH 的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH
对于启动文件这部分我们主要总结它的功能,其功能如下:
• 初始化堆栈指针SP;
• 初始化程序计数器指针PC;
• 设置堆、栈的大小;
• 初始化中断向量表;
• 配置外部SRAM 作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM);
• 调用SystemIni() 函数配置STM32 的系统时钟。
• 设置C 库的分支入口“__main”(最终用来调用main 函数);
2.2.stm32f10x.h文件
stm32f10x.h这个文件就是对寄存器进行封装了,也提供了很多函数,建议多看看这个文件。
2.3.main文件
main文件就是我们逻辑文件的地方了。
3.开发模板
这里以一个案例进行说明,就我们的点灯实验。
3.1.硬件
3.1.1.引脚
找到想要点亮的LED灯的管脚,这里选择PB0(PB0的含义是,GPIOB的第0位)。这些LED 灯的阴极都是连接到STM32 的GPIO 引脚,只要我们控制GPIO 引脚的电平输出状态,即可控制LED 灯的亮灭。
3.1.2.时钟
由于STM32 的外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。
STM32 的所有外设的时钟由一个专门的外设来管理,叫RCC(reset and clockcontrol),RCC 在《STM32 中文参考手册》的第六章。关于RCC 外设中的时钟部分,我们在后面的章节《RCC—使用HSE/HIS 配置》中有详细的讲解,这里我们暂时先了解下。所有的GPIO 都挂载到APB2 总线上,具体的时钟由APB2 外设时钟使能寄存器(RCC_ APB2ENR)来控制。
3.2.软件
1. 使能GPIO 端口时钟;一定要开启时钟,移植代码的时候,这个是注意点
2. 初始化GPIO 目标引脚为推挽输出模式;
3. 编写简单测试程序,控制GPIO 引脚输出高、低电平。
//头文件
#include "stm32f10x.h"
// 包含寄存器的定义
#include "led.h"
//我们自己定义的头文件
// LED初始化函数
void LED_Init(void)
{
//1.打开控制GPIOB的时钟(APB2)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//2.配置结构体
GPIO_InitTypeDef led_init;
led_init.GPIO_Pin
= GPIO_Pin_0;
//GPIOB0引脚
led_init.GPIO_Mode
= GPIO_Mode_Out_PP; //推挽输出
led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz
//3.对成员进行初始化
GPIO_Init(GPIOB, &led_init);
}
就到测试文件里面了,测试文件主要是在main函数里面,先调用我们写的初始化函数,然后在while(1) 循环里面进行控制led状态即可。
至此,整个项目就开发完毕了,其他项目也可以参考这种开发思路,说白了就是,找到硬件,确定GPIO,开启相应的时钟,初始化寄存器,然后就到逻辑控制了。从这里看出,标准库开发,很简单,都是库背后帮我们做了什么事情我们要知道,这样才学到家,学的深一点,才可以更好的适应各种项目开发,这些是个人心得,希望可以对你有帮助。
最后
以上就是搞怪钢笔为你收集整理的stm32开发模板 && 建议1.stm32开发建议2.程序运转流程3.开发模板的全部内容,希望文章能够帮你解决stm32开发模板 && 建议1.stm32开发建议2.程序运转流程3.开发模板所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复