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

【经验分享】STM32实例-用按键控制串口发送数据

[复制链接]
STMCU小助手 发布时间:2022-6-9 10:18
实例介绍
    视频中是实验效果:
    按下按键,串口调试助手接收区显示接收到的字符“1”,同时LED2亮一下表示发送成功。
    开发板用的是STM32F03ZET6芯片。- Q7 \+ Q: D2 o/ x! i2 ~3 ~7 ~
    主函数main.c代码如下:
  1. #include "SysTick.h"2 `) ]3 b) o% A9 @6 c6 t
  2. #include "led.h"
    3 K  v" N' c0 g  C% T
  3. #include "key.h"
    + Q% x6 i' ^3 |+ }5 V" k2 |
  4. #include "uart.h"/ o* e) m! ?" ^# F7 W
  5. 7 J6 ]& B, b/ |" M: m  ^4 j0 {( _

  6. 2 C: b) P& m5 V. G9 F8 s4 Q7 U
  7. /*************************************************0 x! `1 Z, C" }. E' p6 ~7 d3 V0 q
  8. *函数名:主函数
    ' z0 c& @/ V% c; Y0 N" g! P
  9. *函数功能:按下按键KEY_UP,向串口发送字符1
    6 v2 u! F: H5 `
  10. *输入:无
    ' s0 a* U) X" [3 X1 K$ e8 D! H
  11. *输出:无) y' G+ R) ?( D' {5 F, r8 c; ~$ P3 `
  12. **************************************************/! C* P! N+ T  }$ c  [5 y) R. t& K
  13. , U+ b8 G: x9 ^& i( o, o" e% K
  14. int main()
    3 _+ L0 Y3 q. }6 P) M# O( M4 x) Y4 g
  15. {' q8 _% x, X, F4 w- m+ t
  16.   SysTick_Init(72);                 //初始化延时函数, n* C1 u; n8 `+ z
  17.   LED_Init();                       //初始化LED            
    6 j! B- w* H3 q( B, R
  18.   KEY_Init();                       //初始化按键+ ?( w5 d  B/ t: u$ [% C
  19.   USART1_Init(9600);                //初始化串口1,波特率9600# C' k9 ~. \& g! `

  20. 8 M' }2 ]/ M/ \4 j
  21. 2 r3 x8 I( m/ V3 r% |0 X# G4 G
  22.   while(1)
    4 G' Y; }9 M5 D+ v3 v& [. D9 h& c
  23.   {
    4 R0 K% K* Q% t
  24.     if(K_UP == 1)                     //判断上按键是否按下; K  V  t$ F  _. H
  25.     {  U9 T' m$ ?$ H$ ~: P& M% z4 U
  26.       delay_ms(20);                   //按键消抖
    " D) D. \0 y3 k+ M% x
  27.       if(K_UP == 1)
    ) z; \: K' F& U6 U/ ?2 ^
  28.       {
    6 e. l' f) q; }# u2 U! ]& g0 l
  29.         USART_SendData(USART1,'1');   //发送字符14 o) B  m! W: [% M  F% {
  30.         led2=0;                       //led2亮,表示发送成功
    0 m9 h# b8 C% o: p) E
  31.         delay_ms(500);- G5 o% t) v3 V0 Q! D  M. i
  32.       }
    - F1 Z. b+ P8 |$ H# T
  33.     }) I- R# a3 y, ^5 @% o* e& F5 K/ `
  34.     led2=1;                           //led2灭
    9 N. z9 x' H% _. G& P& C  a
  35.   }
    6 _  G! r3 i# I1 n
  36. }
复制代码

2 d# C) y+ d4 {! a' J' J$ k
    从主函数可以看出,首先对外设初始化。
4 I- }! ?4 r) D6 E1 P
    while死循环中,判断按键按下之后,通过串口发送字符1到PC端的串口调试助手,同时LED2亮一下表示字符发送成功。
# g! r3 v# C+ a# E9 n5 X
报错分析; V& d, s1 R' {. L3 O! h/ ]8 k
    记录下我踩过的坑,以及解决的办法,希望对你能有帮助。
  x+ ^! A! |4 @+ S3 u
    当时用的标准库开发,一顿操作猛如虎,敲完代码,点击Rebuild,好家伙报了5个Errors。

( A. Q# ^# y% Z! y* N3 ]
D~8A0_~K4TM]H7W_@KN@E_J.png

5 _6 p) p" Y6 T
    之前没遇到过这种报错,网上搜一下只是得到了笼统的答案,没有具体指出如何操作。   
    产生如下报错,原因是编译器没有找到XXX函数的定义。
  1. <font face="Tahoma"><font size="3"><font color="#000000">XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).</font></font></font><b><font face="Tahoma"><font size="3"><font color="#000000">    </font></font></font></b>
复制代码
1 k- I& U1 l' x0 v- |& H
分为如下两种情况,我遇到的是第二种:
  • XXX函数的头文件没有包含进工程里面,检查下图Include Paths是否缺少XXX所在源文件(.c文件)的头文件路径。

    3 ^0 f$ `7 H8 R! j" J% P
FLK}WVW2MI$(53W6SK02J]U.png
  • XXX函数所在的源文件没有加入到工程里面。检查了一下,发现工程中缺少stm32f10x_usart.c这个串口外设库文件,添加上就行了。
    1 [* y; o/ f2 ^- L5 j/ X+ S: {
M@RKI5IPC2X94T{(47(DWJ9.png
总结
    有时候为了偷懒,把旧工程文件复制一份,在此基础上建新工程。但是,复制一时爽,修改火葬场,两个工程之间细微的差别可能会造成各种各样的报错。
- J6 H* ~4 _, r. ]1 o9 }
    获取完整工程代码请点击“阅读原文”,提取码stm3。如有任何问题,请加我微信hzplwbs咨询,也可以拉你入技术群交流。

% Y2 b  A7 z( B4 V1 r( E0 ]3 m5 P) H* G
收藏 评论0 发布时间:2022-6-9 10:18

举报

0个回答

所属标签

相似分享

官网相关资源

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