|
开始正式测评前,需要准备一个基础的模板工程,后续的测评内容都在该工程的基础上修改
: ?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,选择从开发板开始创建工程 通过左侧的筛选条件,找到U0开发板 弹出的人际接口默认是把LED、按键、虚拟串口都选上了,这些都保持默认即可(如果后续不要可以在CUBE中关掉) 可以看到LED、按键、串口都被配置好了,都不需要用户再来手动配置 来到Project Manager中设置工程名字和选择IDE,生成工程 生成完毕后,会弹出如图提示框,我们选择直接打开工程,就会直接自动打开keil 全编译,没有错误没有警告 下载选项中把烧录后自动运行勾上 下载也没问题,那么模板工程就创建好了(但是还不能直接使用,主要是串口还不能马上使用,还需要稍微修改一下,详见下面的BSP使用) # x- g+ ?; a% ~+ e
二. BSP的使用 BSP的各个函数在stm32u0xx_nucleo.c中,需要调用什么函数可以去这里看
% J3 Q, N' ?7 L0 s" k2.1 LED 在文件中LED相关函数后初始化、去初始化、亮灯、灭灯、翻转、获取灯的状态 其中初始化已经由CUBE自动配置调用了,我们直接使用即可,自动生成的LED初始化函数调用如下 这边以LED的闪烁为例,这里用了on、off函数和Toggle函数两种方式实现了LED的闪烁 - #if 0( R( l# ^ k# ]7 N2 a4 \
- , S w. D4 j1 |
- /* LED BSP测试--on、off函数 */- _) i2 l/ A/ S' U+ V
7 R/ T4 w$ s% Q' J- BSP_LED_On(LED_GREEN);( r% Y% N* ~$ { ]# `: |0 p
- 8 l1 b. ~- D: o( v5 _" l/ [; h6 k
- HAL_Delay(1000);
. q) d0 \: D% K% J7 k1 \$ Y
4 W4 i6 }9 i" A) |- BSP_LED_Off(LED_GREEN);5 p" t1 j' n! J0 I( J
- : `9 m C. n& \7 R. M0 u: \
- HAL_Delay(1000);( L& Q o$ S& Y. s
8 r9 H- A# x$ v8 N- #endif+ x4 V% u3 I4 c
1 h( D( s8 M( m! A$ s' P- ) C' e3 l# W, `2 ^/ k
1 \& C. V% Y1 Y- #if 1; i5 \2 b' z5 p. c* O+ J9 }" x
& U$ }# e" z6 l- /* LED BSP测试--Toggle函数 */
/ q1 @4 `4 b" B; o - & J% d' m& k1 h+ {+ o6 u* d! x
- BSP_LED_Toggle(LED_GREEN);, Y7 M+ |% }8 x4 V A& Z
- " P a/ @5 D+ x. }; v# k
- HAL_Delay(2000);
" P+ s U% C5 k9 A1 S$ R1 Y
6 V9 M5 I; D: {! m- #endif<span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
$ S& F8 b9 j+ H# s2.2 虚拟串口 自动生成的串口的初始化函数调用如图 # A0 t R' j& j7 A& z& a
虚拟串口主要是要做打印输出,一般使用printf,但是当前工程不能直接使用printf,需要做一下printf重定向
# g, i) d7 Q! |6 L0 f, K- int fputc(int ch, FILE *f)
' }; k9 z4 n1 u$ ? - 2 V4 u3 d g) T; L3 x1 g& l
- {
. H8 m. p* b( D( d
2 E$ x$ p; a9 r9 M; l- HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)&ch, 1, 0xffff);
1 W% W) e$ \% S6 j( q
9 @1 {3 x8 |" {, Y' K9 m- return ch;
9 U0 x3 ]/ D3 S# ~3 |/ @" h - $ z5 z: S$ A& o$ l# k) o
- }
复制代码 $ g G" @6 }+ d2 a8 }9 Y
Keil中开启一下Micro LIB 增加一下printf函数,测试一下他能否正常工作 - printf("STM32U0 printf test\r\n");
复制代码 编译烧录,打开串口软件,复位芯片,有打印输出 7 q4 ~/ }4 f4 F, q1 l! y/ u# r4 a
2.3按键 BSP默认是把按键做成了中断触发,stm32u0xx_nucleo.c中有一个叫BSP_PB_Callback的虚函数,当按键按下后就会调用这个函数,用户就只需要关注实现BSP_PB_Callback,在这里面处理按键按下后的业务 - __IO uint32_t UserButtonState = BUTTON_RELEASED;
复制代码- void BSP_PB_Callback(Button_TypeDef Button)4 z' w; ?4 P8 Q- m8 T
4 N. [& h' B& J8 ]. I1 T- {
% j1 x* J' X* I* h8 u: m - ( U" N+ G, d! `
- if (Button == BUTTON_USER)2 y: A4 b; E3 k) E5 s
$ P, r9 \, _7 \ ^8 x- {
8 e% _* j* u9 O/ C - " T0 K- i& @; W+ {$ o( `
- UserButtonState = BUTTON_PRESSED;. C; N# A7 v6 F
2 I, T) p/ w3 s, P/ {' E( p9 L- }
1 n8 `: H0 k6 Z
6 }8 W; \$ F+ @/ @: l- }
复制代码
: i9 K5 i) x' l- #if 18 y# m: p0 \& C$ v, H
4 h5 n1 Z9 Y' x- /* BUTTON BSP测试 */
" b/ w D& t; G - ) w% e5 h" }% O6 X I O% m
- if (UserButtonState == BUTTON_PRESSED)' x$ T# _3 Q* x: z+ a) c: f1 n
0 H4 q, g9 T" f3 h9 S- {
2 R+ Q9 _: j5 A- A% j
8 h% a+ _3 p, P8 b& l- r- z; k- UserButtonState = BUTTON_RELEASED;
7 X+ c9 b/ L" _, Y* G+ d3 n8 `& |3 W
8 d' {5 W& P) O5 L! F9 k. i3 g- BSP_LED_Toggle(LED_GREEN);3 w: ^1 P! b' T5 g+ B/ _! @, d6 ?
- : E" U: D# Y4 e) ~ Q
- }
$ \, J0 v/ [; x8 J7 c* b! e' M - 9 O: o" h* c1 f: D, K, r
- #endif
复制代码 : d: n! R( Q, l+ ]8 W7 k: ]
" V: Y4 I- ?* F. W3 s3 ~
USER按键按下后LED就会进行翻转 % \# d' {3 {' X0 i$ g7 q
模板工程(额外增加了define,替换了上文中#if后面的1): |