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

【NUCLEO-U083RC评测】②创建模板工程及BSP的使用

[复制链接]
小萝卜啦啦啦 发布时间:2024-5-5 20:25
开始正式测评前,需要准备一个基础的模板工程,后续的测评内容都在该工程的基础上修改

: ?8 {2 _" k/ j( \& U% S) e7 k  e
首先同步一下我的开发环境及软件
电脑:Windows 10 64位
STM32CubeMX版本:6.11.1
STM32CubeMX中U0 Pack包版本: 1.0.0
Keil版本:5.37.0.0
Keil中U0 Pack包版本:1.0.0
( Y$ k4 Y; W. u
一. 模板工程创建
打开CUBEMX,选择从开发板开始创建工程
1.png
通过左侧的筛选条件,找到U0开发板
2.png
弹出的人际接口默认是把LED、按键、虚拟串口都选上了,这些都保持默认即可(如果后续不要可以在CUBE中关掉)
3.png
可以看到LED、按键、串口都被配置好了,都不需要用户再来手动配置
4.png
来到Project Manager中设置工程名字和选择IDE,生成工程
5.png
生成完毕后,会弹出如图提示框,我们选择直接打开工程,就会直接自动打开keil
6.png
全编译,没有错误没有警告
7.png
下载选项中把烧录后自动运行勾上
9.png
下载也没问题,那么模板工程就创建好了(但是还不能直接使用,主要是串口还不能马上使用,还需要稍微修改一下,详见下面的BSP使用)
8.png
# x- g+ ?; a% ~+ e
二. BSP的使用
BSP的各个函数在stm32u0xx_nucleo.c中,需要调用什么函数可以去这里看

% J3 Q, N' ?7 L0 s" k
2.1 LED
在文件中LED相关函数后初始化、去初始化、亮灯、灭灯、翻转、获取灯的状态
其中初始化已经由CUBE自动配置调用了,我们直接使用即可,自动生成的LED初始化函数调用如下
12.png
这边以LED的闪烁为例,这里用了on、off函数和Toggle函数两种方式实现了LED的闪烁
  1. #if 0( R( l# ^  k# ]7 N2 a4 \
  2. , S  w. D4 j1 |
  3.     /* LED BSP测试--on、off函数 */- _) i2 l/ A/ S' U+ V

  4. 7 R/ T4 w$ s% Q' J
  5.     BSP_LED_On(LED_GREEN);( r% Y% N* ~$ {  ]# `: |0 p
  6. 8 l1 b. ~- D: o( v5 _" l/ [; h6 k
  7.     HAL_Delay(1000);
    . q) d0 \: D% K% J7 k1 \$ Y

  8. 4 W4 i6 }9 i" A) |
  9.     BSP_LED_Off(LED_GREEN);5 p" t1 j' n! J0 I( J
  10. : `9 m  C. n& \7 R. M0 u: \
  11.     HAL_Delay(1000);( L& Q  o$ S& Y. s

  12. 8 r9 H- A# x$ v8 N
  13. #endif+ x4 V% u3 I4 c

  14. 1 h( D( s8 M( m! A$ s' P
  15. ) C' e3 l# W, `2 ^/ k

  16. 1 \& C. V% Y1 Y
  17. #if 1; i5 \2 b' z5 p. c* O+ J9 }" x

  18. & U$ }# e" z6 l
  19.     /* LED BSP测试--Toggle函数 */
    / q1 @4 `4 b" B; o
  20. & J% d' m& k1 h+ {+ o6 u* d! x
  21.     BSP_LED_Toggle(LED_GREEN);, Y7 M+ |% }8 x4 V  A& Z
  22. " P  a/ @5 D+ x. }; v# k
  23.     HAL_Delay(2000);
    " P+ s  U% C5 k9 A1 S$ R1 Y

  24. 6 V9 M5 I; D: {! m
  25. #endif<span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
10.png

$ S& F8 b9 j+ H# s
2.2 虚拟串口
自动生成的串口的初始化函数调用如图
13.png
# A0 t  R' j& j7 A& z& a
虚拟串口主要是要做打印输出,一般使用printf,但是当前工程不能直接使用printf,需要做一下printf重定向

# g, i) d7 Q! |6 L0 f, K
  1. int fputc(int ch, FILE *f)
    ' }; k9 z4 n1 u$ ?
  2. 2 V4 u3 d  g) T; L3 x1 g& l
  3. {
    . H8 m. p* b( D( d

  4. 2 E$ x$ p; a9 r9 M; l
  5.   HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)&ch, 1, 0xffff);
    1 W% W) e$ \% S6 j( q

  6. 9 @1 {3 x8 |" {, Y' K9 m
  7.   return ch;
    9 U0 x3 ]/ D3 S# ~3 |/ @" h
  8. $ z5 z: S$ A& o$ l# k) o
  9. }
复制代码
$ g  G" @6 }+ d2 a8 }9 Y
11.png
Keil中开启一下Micro LIB
14.png
增加一下printf函数,测试一下他能否正常工作
  1. printf("STM32U0 printf test\r\n");
复制代码
15.png
编译烧录,打开串口软件,复位芯片,有打印输出
16.png
7 q4 ~/ }4 f4 F, q1 l! y/ u# r4 a
2.3按键
BSP默认是把按键做成了中断触发,stm32u0xx_nucleo.c中有一个叫BSP_PB_Callback的虚函数,当按键按下后就会调用这个函数,用户就只需要关注实现BSP_PB_Callback,在这里面处理按键按下后的业务
  1. __IO uint32_t UserButtonState = BUTTON_RELEASED;
复制代码
  1. void BSP_PB_Callback(Button_TypeDef Button)4 z' w; ?4 P8 Q- m8 T

  2. 4 N. [& h' B& J8 ]. I1 T
  3. {
    % j1 x* J' X* I* h8 u: m
  4. ( U" N+ G, d! `
  5.   if (Button == BUTTON_USER)2 y: A4 b; E3 k) E5 s

  6. $ P, r9 \, _7 \  ^8 x
  7.   {
    8 e% _* j* u9 O/ C
  8. " T0 K- i& @; W+ {$ o( `
  9.     UserButtonState = BUTTON_PRESSED;. C; N# A7 v6 F

  10. 2 I, T) p/ w3 s, P/ {' E( p9 L
  11.   }
    1 n8 `: H0 k6 Z

  12. 6 }8 W; \$ F+ @/ @: l
  13. }
复制代码
17.png

: i9 K5 i) x' l
  1. #if 18 y# m: p0 \& C$ v, H

  2. 4 h5 n1 Z9 Y' x
  3.     /* BUTTON BSP测试 */
    " b/ w  D& t; G
  4. ) w% e5 h" }% O6 X  I  O% m
  5.     if (UserButtonState == BUTTON_PRESSED)' x$ T# _3 Q* x: z+ a) c: f1 n

  6. 0 H4 q, g9 T" f3 h9 S
  7.     {
    2 R+ Q9 _: j5 A- A% j

  8. 8 h% a+ _3 p, P8 b& l- r- z; k
  9.       UserButtonState = BUTTON_RELEASED;
    7 X+ c9 b/ L" _, Y* G+ d3 n8 `& |3 W

  10. 8 d' {5 W& P) O5 L! F9 k. i3 g
  11.       BSP_LED_Toggle(LED_GREEN);3 w: ^1 P! b' T5 g+ B/ _! @, d6 ?
  12. : E" U: D# Y4 e) ~  Q
  13.     }
    $ \, J0 v/ [; x8 J7 c* b! e' M
  14. 9 O: o" h* c1 f: D, K, r
  15. #endif
复制代码
: d: n! R( Q, l+ ]8 W7 k: ]
18.png
" V: Y4 I- ?* F. W3 s3 ~
USER按键按下后LED就会进行翻转
% \# d' {3 {' X0 i$ g7 q
模板工程(额外增加了define,替换了上文中#if后面的1):
STM32U0_template_project.rar (5.15 MB, 下载次数: 2)
赞 1 收藏 评论1 发布时间:2024-5-5 20:25

举报

1个回答
STMCU-管管 回答时间:2024-5-9 14:05:03
流程写的很详细,可以按照之前申请的内容再扩展一下
! ]+ l* ]5 k- [4 ]4 w

所属标签

相似技术帖

官网相关资源

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