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

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

[复制链接]
STMCU小助手 发布时间:2021-9-14 13:42
实例介绍, u6 [- M* r$ @$ t1 s6 o
    视频中是实验效果:
' L& c1 s( g  L" D. |& p  m; t    按下按键,串口调试助手接收区显示接收到的字符“1”,同时LED2亮一下表示发送成功。
$ W  S) @* G1 A  b' F: x3 M& }    开发板用的是STM32F03ZET6芯片。1 [8 w' L9 S8 |- m2 U
* y, W; K7 W& v4 s" A4 f6 t

8 e# I. K# @2 p) Y  g6 h    主函数main.c代码如下:
3 ~! C, F% z# \: p2 E4 E
  1. . T0 e7 d/ X) d) c
  2. #include "SysTick.h"+ H, A, _7 W; N7 v! Z) G5 R( l
  3. #include "led.h"
    3 Z) H# ]" ]" x- [( Z7 n
  4. #include "key.h"
    ( W1 [! }0 j: }* y5 e/ e/ _
  5. #include "uart.h"
    2 P6 E8 w- _3 v$ g* h1 k! i

  6. 2 J, s$ y) |0 t/ L& O( U" _7 U
  7. , k9 M- t& g. T2 |5 A9 ^
  8. /*************************************************% Y/ a! |1 q  v! X
  9. *函数名:主函数) D/ d/ `. o$ E- k0 o
  10. *函数功能:按下按键KEY_UP,向串口发送字符1: z) V; t+ U1 U1 Y
  11. *输入:无
    ) B6 K' O4 J1 s: m
  12. *输出:无
    $ y( W  D; D: w6 t# \
  13. **************************************************/: [2 V  V1 ]. W% _0 J: W9 Y

  14. / c  P1 M& ~! I7 i/ Q% D+ t
  15. int main()
    % ^# h& T8 V0 x# [8 t+ e& u+ B
  16. {8 T' p  ]2 o0 s& X  t5 W- Z
  17.   SysTick_Init(72);                 //初始化延时函数3 V) [7 i' g: g  y3 ?$ B
  18.   LED_Init();                       //初始化LED            
    6 H7 N2 y$ Z# \4 Q  N8 r) D0 ]. A5 u
  19.   KEY_Init();                       //初始化按键
    7 v2 X/ _2 _; f! D
  20.   USART1_Init(9600);                //初始化串口1,波特率9600
    6 H/ K$ E6 x" I9 F' B) D) c

  21. 9 \/ Y4 P$ t3 S; O/ C" }  {: `) [  @

  22. 9 i& i3 F" s& y5 E
  23.   while(1)
    . [3 g: {  v* H3 w4 m
  24.   {
      V: x* C% V# y4 u. `1 x
  25.     if(K_UP == 1)                     //判断上按键是否按下5 r1 j% C$ ?9 E+ i) d
  26.     {
    ) J/ `( H4 K. x9 e* M" }
  27.       delay_ms(20);                   //按键消抖0 {* g8 R& z8 E! A  J# X# g3 J
  28.       if(K_UP == 1)8 Q+ `: T. Q, \7 S" _# I
  29.       {/ ]" j% U; M& v
  30.         USART_SendData(USART1,'1');   //发送字符1. H: i9 s2 _5 k% }+ ]% ^+ l1 Q! p
  31.         led2=0;                       //led2亮,表示发送成功3 L; Z  f4 \% u1 B
  32.         delay_ms(500);9 N. G8 n! u/ d1 E4 N3 R
  33.       }
    4 {" a8 D/ E, n/ r3 t
  34.     }
    4 P2 U; D, F* T
  35.     led2=1;                           //led2灭& F  Y" G/ ~5 K
  36.   }4 `. h/ ]$ H! [6 _4 G( e, l
  37. }
复制代码
' y9 A1 X2 [" _2 D) |8 G+ g. l

" ]1 x4 F) d. f. G$ v5 B) q' a5 F- | 从主函数可以看出,首先对外设初始化。( v9 v3 C2 W9 q; O. B1 b
1 z7 n+ {7 }0 k" a! w; ^
+ n4 K- _% ^  ^; C9 l8 @
    while死循环中,判断按键按下之后,通过串口发送字符1到PC端的串口调试助手,同时LED2亮一下表示字符发送成功。; L# q7 h% S% _+ R, \- G) Z9 X
- ?" ^/ E) U8 N- a6 [
7 P) c. m3 R% P" U% b* X
报错分析
2 Z2 S$ V% A: k8 G! c6 f2 O; a) I9 w

% E$ ^" a: y4 e/ f    记录下我踩过的坑,以及解决的办法,希望对你能有帮助。
! N: w- D% u: |) T0 H3 r1 A
( T& H8 m, f+ s7 d5 L" A
4 M9 O2 M5 {) U, s$ C" O" N
    当时用的标准库开发,一顿操作猛如虎,敲完代码,点击Rebuild图片,好家伙报了5个Errors。
4 [1 ?4 w- R, P2 P" b1 I$ n
18.png
    之前没遇到过这种报错,网上搜一下只是得到了笼统的答案,没有具体指出如何操作。   
2 \8 W& ]( u8 b: H6 K' e9 I% ?1 m; p) {: g$ r5 x1 {
7 @1 r) H# p1 Z0 F
    产生如下报错,原因是编译器没有找到XXX函数的定义。& @" z4 h7 k6 \8 f
  1. 0 l& V3 D& d3 b7 P
  2. XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
复制代码
分为如下两种情况,我遇到的是第二种:& X2 M  B/ ^7 M2 p
XXX函数的头文件没有包含进工程里面,检查下图Include Paths是否缺少XXX所在源文件(.c文件)的头文件路径。. k. F' E, I& L; V/ j
16.png
XXX函数所在的源文件没有加入到工程里面。检查了一下,发现工程中缺少stm32f10x_usart.c这个串口外设库文件,添加上就行了。7 g' }) |$ {( Y# u+ ^
17.png
总结! N  ?4 C; Q1 D( G# u
    有时候为了偷懒,把旧工程文件复制一份,在此基础上建新工程。但是,复制一时爽,修改火葬场,两个工程之间细微的差别可能会造成各种各样的报错。
8 ]! ?- Q$ ]$ |; p" C4 D' A
2 x8 j! U2 U/ M4 \
$ h( @' j/ ?+ J# `
代码如下:- a# r( B, h& n- }
https://pan.baidu.com/share/init?surl=AvGKZ6u4nL4mi8cEyY0s-g
( V' Y1 G# Z6 E3 R8 a, V- ?$ ^7 I提取码:8 [* z+ a" J5 C/ L6 B; Q
stm3$ d* ?& H- k$ I) X: N( @

" _+ T$ W8 d/ O0 v2 V) k) N文章出处:STM32嵌入式开发1 z: h5 e% p. y1 n/ T/ J
3 X. t; |2 f9 y5 E; k' E
收藏 评论0 发布时间:2021-9-14 13:42

举报

0个回答

所属标签

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