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

基于STM32实例-用按键控制串口发送数据(文末附代码)

[复制链接]
STMCU小助手 发布时间:2021-9-14 13:42
实例介绍' V- G7 J- S  c
    视频中是实验效果:
2 Z7 j9 N2 |# D5 ?; U    按下按键,串口调试助手接收区显示接收到的字符“1”,同时LED2亮一下表示发送成功。+ C2 @/ d) @/ R; u& V
    开发板用的是STM32F03ZET6芯片。
/ M" t9 q- a) E$ [9 j
' c! A( w$ s( h. z+ m7 _

- [$ f2 I2 _! k* S) ~' B5 Y    主函数main.c代码如下:' s+ o3 M7 v( u; `6 R  K$ S
  1. ) _' f1 _- E9 }% R5 C" U
  2. #include "SysTick.h"
    " c) w1 F$ w$ @9 u
  3. #include "led.h"$ r; p% J! }4 _" j; q5 h  {
  4. #include "key.h"
    * O2 H6 Y* M+ F& _! r$ k% a3 f
  5. #include "uart.h"2 C: I! w2 D- o5 M  v
  6. ! D; Q' E, e! l6 v) M+ G

  7. , v; l. u4 S) d& m
  8. /*************************************************" o8 a; ^' |% X& R& \
  9. *函数名:主函数- R% U7 T  j) v% |: v2 Y; O
  10. *函数功能:按下按键KEY_UP,向串口发送字符1, w  q9 f: R8 i
  11. *输入:无% R7 G3 n% @! A: C2 V  l( x
  12. *输出:无
    / J4 c' j9 x+ G& j! B( T2 b" @- V
  13. **************************************************/
    ' P7 ~4 I, W, }0 l) F
  14. 5 w% {, h0 L  t1 V
  15. int main()
    + }& P/ u  m7 ], B0 [
  16. {, w1 @9 i/ h0 z3 Z8 a+ [  Q/ H
  17.   SysTick_Init(72);                 //初始化延时函数: t. n( W3 D+ m. i& \
  18.   LED_Init();                       //初始化LED            6 H. m6 E! {$ L  a
  19.   KEY_Init();                       //初始化按键
    , m) N3 i' `& r; j; `5 V8 b. H
  20.   USART1_Init(9600);                //初始化串口1,波特率96004 T! |3 {2 u6 D
  21. 1 E* Q2 f6 n! T# r

  22. 2 h8 x; P9 m2 p) c7 h% k
  23.   while(1)$ |7 U: O2 T* W: {( h
  24.   {
    ! Y$ Y1 |) \8 b1 E
  25.     if(K_UP == 1)                     //判断上按键是否按下
    9 D# h+ E5 _; p! y/ G
  26.     {/ i* R! M+ j# R5 S
  27.       delay_ms(20);                   //按键消抖
    8 E% }! e7 k$ u" ]) i- o
  28.       if(K_UP == 1)
    4 E5 q# h$ `. G$ K' y1 \& M
  29.       {! I) U, [- _& J7 A  ]* f
  30.         USART_SendData(USART1,'1');   //发送字符1
    1 u: C5 Z8 h9 K& W7 G
  31.         led2=0;                       //led2亮,表示发送成功* |# ^0 G2 a( L& Q
  32.         delay_ms(500);
    - H1 K8 C! R4 g; S
  33.       }
    * N% U& c2 B* V0 b. }3 N
  34.     }
    ( V) Y! D1 p2 b- U, ~5 v$ z
  35.     led2=1;                           //led2灭
    : r4 m7 e% W6 e; V
  36.   }
      {) S/ x8 n4 D" j7 ^
  37. }
复制代码

# L! z) l  G2 w3 P! e/ U
8 A" Y4 Q, n+ z9 e0 U
从主函数可以看出,首先对外设初始化。4 G/ @: Y7 x' H0 f7 x
( }% H" N) A% u9 k

+ N7 ?5 q: @! k/ p8 t7 P9 L% u$ i0 C    while死循环中,判断按键按下之后,通过串口发送字符1到PC端的串口调试助手,同时LED2亮一下表示字符发送成功。7 ~. s( k8 v2 U$ _6 i! j

. ?6 ~$ T& i4 h5 z7 h# ^1 b' J& t

, w, ?3 C1 u0 ~5 A8 a报错分析
! \% {# l$ q3 c$ T0 ^6 C( C* d( f1 o3 ?. L6 O9 W

& k; n$ |% j$ e0 V3 W( W' S3 I    记录下我踩过的坑,以及解决的办法,希望对你能有帮助。
. ?+ f. E$ S) U0 N: @9 P, }9 Q5 u3 w* q1 p
) g) }7 B% b7 L' I( \# @
    当时用的标准库开发,一顿操作猛如虎,敲完代码,点击Rebuild图片,好家伙报了5个Errors。
' j/ p8 n, ?" p1 s4 u' a2 }$ w
18.png
    之前没遇到过这种报错,网上搜一下只是得到了笼统的答案,没有具体指出如何操作。   
: n; A% S" g  O; J. ]
. M  ]# m, _2 N& l) y( Z' W! j

. A  ^. ^$ |/ I  @. l! [; r* f    产生如下报错,原因是编译器没有找到XXX函数的定义。% {7 u: c/ P8 C
  1. 2 X: C; c% A  v7 |, T* r5 l2 o
  2. XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
复制代码
分为如下两种情况,我遇到的是第二种:$ H' v! |; D) p# Y, u
XXX函数的头文件没有包含进工程里面,检查下图Include Paths是否缺少XXX所在源文件(.c文件)的头文件路径。. d) l- Y1 ]7 P
16.png
XXX函数所在的源文件没有加入到工程里面。检查了一下,发现工程中缺少stm32f10x_usart.c这个串口外设库文件,添加上就行了。. W* F3 X$ ?/ W7 Z( ^+ u
17.png
总结
, R7 h; z, L4 f( o. }& b    有时候为了偷懒,把旧工程文件复制一份,在此基础上建新工程。但是,复制一时爽,修改火葬场,两个工程之间细微的差别可能会造成各种各样的报错。, G+ r7 L7 c: t" Z
0 Y/ V6 {6 l$ y/ ]4 u$ ^
7 c9 B/ M* F/ c3 y" m% _5 x
代码如下:; {1 ?+ R& @) ?" [6 @: a7 y. ~
https://pan.baidu.com/share/init?surl=AvGKZ6u4nL4mi8cEyY0s-g3 ]4 N" N8 W8 l2 y
提取码:
& n% u7 I+ ?) _2 Tstm32 D1 S4 J+ K' g# W! ?4 {3 ~
- ~8 j4 O' B- g8 h7 A* G% ^
文章出处:STM32嵌入式开发
0 T6 m" w0 P9 g* t8 b% b! f- u, f( V& T' K$ h
收藏 评论0 发布时间:2021-9-14 13:42

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版