STM32G0-BSP
STM32G0-BSP是基于STM32G070CBT6微控制器的板级支持包,它提供了一系列常见硬件模块、外设的使用例程,提供了一种轻量易用的时间片轮询结构,方便用户快速驱动模块、调用板载功能。
依赖
STM32CubeMX
MDK-ARM Keil5
示例
提供以下板级支持包和对应的使用例程
文件结构
板级支持包的工程文件分为两大部分,一部分是由STM32CubeMX自动生成的,一部分是自己添加的,以mpu6050模块为例,其工程文件结构如下
- mpu6050
- ├─BSP
- ├─LIB
- │ └─mpu6050
- ├─MDK-ARM
- ├─Drivers
- ├─Core
- ...
复制代码
/BSP目录下是自己编写的板级支持包文件,对外提供各类板载功能接口;
/LIB目录下是调用的外部库文件;
其余文件均为STM32CubeMX自动生成
命名约定
良好的编程命名规则有利于快速索引和匹配所需的对象,提高编程效率。该板级支持包编程命名规则与STM32HAL库类似,具体规则如下:
1、函数命名
函数命名包括三部分,板级支持包+模块名称+函数具体动作,两两之间下划线分隔,函数具体动作采用大驼峰式命名法
- BSP_LED_Init(); // led初始化
- BSP_MPU6050_GetData(); // 获取mpu6050的数据
复制代码
2、类型命名
类型命名包括两部分,模块名称+类型名,两者之间下划线分隔,类型名采用大驼峰式命名法
- // esp8266消息结构体
- typedef struct {
- int len;
- uint8_t *buf;
- } ESP8266_Msg;
- // led类型枚举
- typedef enum {
- RED = 0,
- GREEN,
- BLUE
- } LED_Type;
复制代码
3、变量命名
变量命名采用全小写,下划线分隔
- float bat_voltage = 0; // 电池电压
复制代码
4、宏和常量
宏和常量采用全大写,下划线分隔
- #define LED_NUM (2) // led的数量
- const int LED_NUM = 2; // led的数量
复制代码
轻量级时间片
该板级支持包提供了一个轻量、易用的时间片轮询功能,位于bsp_time模块中,使用方法如下
1、提供一个1ms的时基
- // stm32 systick 1ms 中断
- void SysTick_Handler(void)
- {
- BSP_Time_IncTick(); // 时间片轮询时基
- }
复制代码
2、创建轮询任务
- int main(void)
- {
- BSP_Time_Init(); // 时间片轮询初始化
- while(1)
- {
- if(BSP_Time_CheckTick() ==1 )
- {
- // 500ms轮询任务,绿色led闪烁
- if(BSP_Time_CheckSlice(500) == 1)
- {
- BSP_LED_Toggle(GREEN);
- }
- // 100ms轮询任务,更新hc-sr04超声测距模块的测量距离
- if(BSP_Time_CheckSlice(100) == 1)
- {
- BSP_HCSR04_UpdateDist();
- }
- // 1000ms轮询任务,获取并打印hc-sr04超声测距模块的测量距离
- if(BSP_Time_CheckSlice(1000) == 1)
- {
- float dist = BSP_HCSR04_GetDist();
- printf("dist is %.2f cm\r\n",dist)
- }
- }
- }
- }
复制代码
移植
利用STM32CubeMX生成工程,添加/BSP目录和对应的驱动文件,修改端口并添加少许驱动代码就能实现不同STM32微控制器的快速移植。
————————————————
版权声明:周云川
|