你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G0-BSP板级支持包

[复制链接]
STMCU小助手 发布时间:2022-10-25 22:45
STM32G0-BSP
2 G- S$ n1 e0 S/ w
- v5 N! N3 D- Y' {/ d' `  m# N f5b28fbcaefc45f6b7f587c1ab23e86c.png # ?, a5 y! c; @! N0 h5 p

: Q% m, c" V! X: I( W0 M( Q  hSTM32G0-BSP是基于STM32G070CBT6微控制器的板级支持包,它提供了一系列常见硬件模块、外设的使用例程,提供了一种轻量易用的时间片轮询结构,方便用户快速驱动模块、调用板载功能。
$ D, ~8 L% k8 x/ D" V: j
, ^+ j; z$ E8 c" t8 w& Z  o+ u
6 R( s8 g6 m$ l/ L% w依赖) R8 x7 z7 `% ?. `0 j) Z
STM32CubeMX) |* t8 J* W! T. ?: j
MDK-ARM Keil5% g. J" {5 F4 P: q
示例

  G' f/ S2 r2 t. w. ~, d  \; z+ b0 e提供以下板级支持包和对应的使用例程5 s' L! ?; b% f/ t

. Z6 B& H5 H. |" @: p $]~TQJ}2VW74KZX8N3QBURV.png ( C2 b5 f5 g+ v+ i
- {2 `; f3 d2 J5 {8 B* E/ y
文件结构
1 `7 ]" ?: E; A" a板级支持包的工程文件分为两大部分,一部分是由STM32CubeMX自动生成的,一部分是自己添加的,以mpu6050模块为例,其工程文件结构如下
, \- K+ Y+ G9 \1 D- N  R
% N" j7 [7 W) ^3 L, M
  1. mpu6050
    ' `. y$ v% Y2 P% A: ?
  2. ├─BSP, m% L$ s1 H1 |
  3. ├─LIB
    0 e6 B$ O( J, J+ i& M
  4. │  └─mpu6050
    4 q5 ]8 Y! A$ H' q
  5. ├─MDK-ARM
    7 E! U( ^2 \6 g
  6. ├─Drivers
    ( y' y1 H( ^0 c- K+ K
  7. ├─Core
    7 @9 Q# X; J2 g8 j2 Y$ ]
  8. ...
复制代码
1 N/ P/ |; D9 R, i6 p# b
/BSP目录下是自己编写的板级支持包文件,对外提供各类板载功能接口;
7 ^5 [, @% k. w9 z5 L1 z
/ A9 e5 y, @: r8 y1 b5 f/LIB目录下是调用的外部库文件;
# y8 U9 S; k  p" @/ ]+ }. P" _5 \! ^1 u9 k2 `# s2 M8 x1 e. X6 G& \
其余文件均为STM32CubeMX自动生成' W1 ]5 o0 Z  m/ V! e1 m9 P* [
( V  j# P& b, g* F& m2 S  G; A: a& @
命名约定
% l! T( q7 ]9 S0 l& G3 ?$ r良好的编程命名规则有利于快速索引和匹配所需的对象,提高编程效率。该板级支持包编程命名规则与STM32HAL库类似,具体规则如下:
' h" }; ?+ E! ~  A9 ^" g$ `1 b- L
8 h, q! {4 J8 g0 k+ q6 @1、函数命名
: g# r  O. ]6 w7 o( D6 G: F* r5 C3 m! v/ Z1 F1 q
函数命名包括三部分,板级支持包+模块名称+函数具体动作,两两之间下划线分隔,函数具体动作采用大驼峰式命名法. `( [7 N; P% X

4 Q; c4 I6 Y7 q& F$ x8 ]
  1. BSP_LED_Init();           // led初始化
    / ~* L* W) u6 M9 i- \
  2. BSP_MPU6050_GetData();    // 获取mpu6050的数据
复制代码

  z- s5 R. w! n9 h1 v/ e& Y3 c0 C2、类型命名; ~* f. x* c( `5 J7 e9 N2 f9 S

. W# u- ]  O  T6 V( i: C2 Q类型命名包括两部分,模块名称+类型名,两者之间下划线分隔,类型名采用大驼峰式命名法
6 E! s  O: {* _# U, S- N' E# ]$ S3 [* @% Y
  1. // esp8266消息结构体, H- _5 _& f  q( f2 B! z
  2. typedef struct {
    3 |, f& m* P6 ]0 G) |0 ]8 K7 s
  3.   int len;% G; k/ n; c7 M% n
  4.   uint8_t *buf;
    7 t# r0 f$ q, T& }- F
  5. } ESP8266_Msg;7 |" [# `& ]5 }& z2 `
  6. ( x8 @( [& s1 z
  7. // led类型枚举
    5 F* l3 Q! f- l
  8. typedef enum {
    8 i3 \7 p& x- L0 f8 F0 \( C$ o
  9.   RED = 0,! `' [; a$ ~; F$ e2 V. z* ~
  10.   GREEN,
    ! H  K  M# P# R- |
  11.   BLUE
    4 \% G+ |; i' z4 J# ~& y+ I% @
  12. } LED_Type;
复制代码
8 E0 P) u  E% d1 l7 j
3、变量命名/ r# H" H; _  ]* P# v5 H

* h9 C* A7 n9 C8 g% F变量命名采用全小写,下划线分隔
! Q$ `' r' m: K" \  `$ Z3 R" X" {
  1. float bat_voltage = 0; // 电池电压
复制代码

7 x1 H' q0 A: [0 y$ C- Y0 x4、宏和常量8 ~0 O# U4 `& ?

) c2 Z) Y' A3 Z0 y" }- M9 B( p: L宏和常量采用全大写,下划线分隔, x8 a% @4 V4 `8 i

5 J5 ~1 O; g- T/ T/ {3 Q& }
  1. #define LED_NUM (2)    // led的数量8 A. D+ d; F8 r
  2. const int LED_NUM = 2; // led的数量
复制代码
1 P% Z! N( X5 D6 J$ p+ A2 ?
轻量级时间片* ~; g/ H2 R+ s* W/ V8 z
该板级支持包提供了一个轻量、易用的时间片轮询功能,位于bsp_time模块中,使用方法如下
  f1 t8 b, n+ p0 E, ]  @6 M% E( C0 {
, T( P5 S6 q" h8 h0 b1、提供一个1ms的时基  k0 p  A/ @& ^: l' s" C6 G

; O0 ?. h: S7 b
  1. // stm32 systick 1ms 中断
    / F9 K! u# {" |( y- i+ S6 \9 n
  2. void SysTick_Handler(void)( M$ L. q. z- x  ]0 I: e
  3. {
    ( _+ z* x( o& L8 y$ J+ R, t
  4.   BSP_Time_IncTick(); // 时间片轮询时基
    : V# ^* j4 q6 B+ F% N0 X* o
  5. }
复制代码

  _" R9 I2 |, F% }; J% Q8 X2、创建轮询任务
* u+ A) ?4 J" {$ I
' t/ b7 h$ T: d+ L6 M
  1. int main(void)
    / r7 q' V8 A- L
  2. {' X% m6 {3 _0 _/ ]( {/ c
  3.   BSP_Time_Init(); // 时间片轮询初始化
    4 D3 T& m: f1 q5 s6 J
  4.   while(1)6 K% x( J7 l1 J# ^, l% b
  5.   {$ y* @! Y0 t. V5 P. @" U, m
  6.     if(BSP_Time_CheckTick() ==1 ); M) H. }' X; c+ B$ J, R. ]
  7.     {* y  M" m- w# h
  8.        // 500ms轮询任务,绿色led闪烁" S( O- T" }3 o. k) m' s" H" }
  9.       if(BSP_Time_CheckSlice(500) == 1)
    ) D6 Y, o% y7 E0 k, k
  10.       {$ y3 v/ c; A# ?) c1 F( M
  11.         BSP_LED_Toggle(GREEN);/ D3 f7 v% U4 ?7 y9 F$ H0 h
  12.       }1 L7 b0 X: I( ?, [/ J4 j1 A' j
  13.       // 100ms轮询任务,更新hc-sr04超声测距模块的测量距离+ Y( u; I3 I/ o' T
  14.       if(BSP_Time_CheckSlice(100) == 1)9 h, B. M- i' d* t$ O+ t, I
  15.       {: r0 p  B/ ?* k" B
  16.         BSP_HCSR04_UpdateDist();* U3 C  a% S4 Q8 b/ e" }, q
  17.       }
    + g  b" V) h9 b0 p6 I( [
  18.       // 1000ms轮询任务,获取并打印hc-sr04超声测距模块的测量距离
    ! d; L! \7 }# H# e
  19.       if(BSP_Time_CheckSlice(1000) == 1)
    3 U9 |0 \8 D+ h6 |! u
  20.       {! o+ N5 Q  v: d4 _/ q" V' }$ o
  21.         float dist = BSP_HCSR04_GetDist();
    4 l& l. {7 U" A" T
  22.         printf("dist is %.2f cm\r\n",dist). X) B3 C/ h. h3 ?
  23.       }
    9 a/ \/ r# ?- q6 y7 n5 I$ ]7 T
  24.     }
    + G$ z0 n* a3 Z9 z
  25.   }4 v; h: c: K$ F3 A) k
  26. }
复制代码

2 v# v5 x3 [( x* ~6 a* P* |8 |! P移植( C! u* f% n* @( g
利用STM32CubeMX生成工程,添加/BSP目录和对应的驱动文件,修改端口并添加少许驱动代码就能实现不同STM32微控制器的快速移植。
) K; {+ Y1 i& r" `  _# Z( @————————————————
. ?  s1 F  Q) z; x' x版权声明:周云川* p8 c3 v8 M8 ]( o
- G! M& f; o: o, m/ o0 v! c

5 a. I4 K2 G+ G$ {
赞 收藏 评论0 发布时间:2022-10-25 22:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版