找回密码
 注册
关于网站域名变更的通知
查看: 616|回复: 5
打印 上一主题 下一主题

UART串口读取不到数据问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-7 13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
uart.c
- s/ @; D# O& c0 c: V9 f& {8 P. T. c1 K0 [
0 M* J7 f& X7 `# }% X
void USART1_Init(u32 bound){ //串口1初始化并启动) t3 x- m7 I& b# ]7 D
    //GPIO端口设置- ~6 ]) a( n& P% L' P, m& x
    GPIO_InitTypeDef GPIO_InitStructure;
4 p5 k$ V" U; A1 E& @( Z        USART_InitTypeDef USART_InitStructure;
# J9 R+ U# p! j8 v0 D1 @$ V( q1 d( X! T% c9 w- R2 P5 z

5 R  y- F3 b' @) X& t6 v        RCC_APB2PeriphclockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //使能USART1,GPIOA时钟
6 b# v5 d+ U' f& H     //USART1_TX   PA.9
; g5 C4 n6 _' u/ R    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
2 X& o. `* m- r' V; y8 K    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;5 X  X% E  O4 [3 ^2 ~
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出7 a! d2 o6 S3 i" Y+ j0 t
    GPIO_Init(GPIOA, &GPIO_InitStructure);  . [2 E3 r/ I8 p7 W$ X  S
    //USART1_RX          PA.10
& B: m3 K& \! M# h& [3 F    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
8 v9 v( v, z* d' ?8 j7 I* ?5 x4 p- d    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;//浮空输入
6 W& h, a* u8 ^9 f( b3 u- R& ?" l    GPIO_Init(GPIOA, &GPIO_InitStructure);" C' O" X6 f, a

/ e3 M0 t9 r% b' m
4 Q! {* B& B( d8 D2 N3 Q6 ~& o
   //USART 初始化设置  q8 g" S; M+ V* l8 |" n& A
        USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;  G1 }# K9 T5 H% p6 a" A
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式8 w, ?2 ]  L: r, m" u$ B
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位5 P# B8 x) v  l
        USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
/ }6 Z+ S% l4 N. ]; t/ S9 o4 G. l        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
; T8 E! M* `$ {        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式
9 L$ W" x/ m# c    USART_Init(USART1, &USART_InitStructure); //初始化串口
7 W$ x$ I( O) _2 b! W$ f, Y    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启ENABLE/关闭DISABLE中断! `) P* A' y% J  Q8 f  ~
    USART_Cmd(USART1, ENABLE);                    //使能串口
) X* C; O  s5 j- c/ [' H}
+ o8 L; y+ N, t7 h6 j' N9 {
% ^. I3 f0 p. m. g; F2 V5 l# s

( s* q+ c. ~" w% yu8 rx_buffer[20];
8 v8 }2 l# T! Y) X* Vu8 flag=0;, v1 I; Z! b: i7 y5 b
u8 i=0;/ `8 ?& i( K# ]3 r- ^$ D

1 h- @" T: c+ x4 t# _. T& g: p

. y5 b2 e" a: t% k+ Ovoid USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改)        
- X: K& u: I; Y, D' c        u8 res;! o3 L" f9 Y) S  a

& J; X! b- ^( y2 ]  n0 D& \

" X  H' C& P- j# |! M1 G        if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
; @! m/ O$ i, C, G7 y% ?! U6 X6 {# J        {        
1 Q) n* j, R  v8 a                res = USART_ReceiveData(USART1);               % \; F' G9 g9 h% g* H4 Z0 w
                if(flag != 4)" W- b  I# w$ C" w8 {* c
                {
$ [/ Y% `9 @5 d+ R                        rx_buffer[i++] = res;. G/ `2 k6 [2 @6 L
                        flag ++;
9 [6 R& f, m6 Q8 U9 ?4 c6 l% x+ X; t$ S+ |( s+ X
) s4 G# e& M& W3 H5 C
                }               
! O. a8 `' H7 J        USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除串口3的串口接收中断标志位
$ D0 m9 I0 Y: \        }8 w. Y6 }9 @) M" D! ]
}- d- T5 n3 @4 Y( G! j) ?& \

2 g9 Z/ [' r1 C4 v" s4 W, E- F; g3 M1 L
8 v4 m- \; F6 y) o, S% R8 B6 G
( D6 m* ?% m6 b+ I9 m
main.c: [. `, ~' P. z" K
! Z3 s) k8 v0 T% N. U4 \

: y! {2 z" V- ?* p6 X0 Q#include "STM32f10x.h" //STM32头文件
9 G+ w( W( F0 N1 |
9 z+ S$ e1 ?. f* L5 ?$ \4 {#include "delay.h"  B& J8 F- R6 o4 F  H4 S$ l
% k0 m) T8 Y/ @' \1 D' P
#include "usart.h"/ A7 w; u  M# @( k% _3 z4 G
+ M% k: Z2 b/ {$ m$ h8 v, @
extern u8 rx_buffer[];
* l  p" F$ h5 nint main (void){//主程序
# K( `, e( u4 H( c5 R        u8 sum;
0 Q* K( t4 x7 L7 c; ]: G5 E        u32 dis=0;3 e( R8 b* y: R4 _
        //初始化程序' L$ r4 b, m8 W1 g
        RCC_Configuration(); //时钟设置6 `% F6 h0 g# `* I( S" v
: L2 \) L1 H  i0 L) Q/ C
        USART1_Init(9600); //串口初始化(参数是波特率)
" N5 w4 d) @, @. w. y/ M* ?( G8 }- w6 \# h! ]
        //主循环
' S' O+ v7 ~7 i- u8 M$ w: _        while(1){
8 ?1 q4 u0 j. \+ E- d+ E0 N& Z
9 t! S0 ~6 _: h' Hsum = (rx_buffer[0] + rx_buffer[1] + rx_buffer[2]) & 0x00FF;        //A02校验和,前三项加和的低8位
. P5 ?+ L9 f; z- H3 W: G               1 E- v, U5 X# ?2 U7 O7 {( e3 e
                if((rx_buffer[0] == 0xFF)&&(rx_buffer[3] == sum))        //帧头0XFF,帧尾校验和/ n! N1 h# n0 v/ O, A5 c- V
                {
' M; v$ G' g* z% X: J- b: }$ Y                        dis = (rx_buffer[1] << 8) + rx_buffer[2];        //数据高八位和低八位
3 {  ^% s. m* Y! w: u& F                }% z9 Q. B7 h4 {
        }
7 W5 S! D+ @! G, Q9 X6 I; C% F}

6 \1 |/ v2 {" h
  • TA的每日心情
    开心
    2023-1-3 15:10
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2021-4-7 14:27 | 只看该作者
    这个串口是没有显示连接上还是只是没有数据?

    该用户从未签到

    3#
    发表于 2021-4-13 15:08 | 只看该作者
    建议先调试中断发送有没有问题,确定uart初始化这类没问题,再调试中断接受

    该用户从未签到

    4#
    发表于 2021-4-13 15:08 | 只看该作者
    或者不使用中断方式接受数据,采用轮询方式接受数据
  • TA的每日心情
    奋斗
    2025-1-1 15:26
  • 签到天数: 584 天

    [LV.9]以坛为家II

    5#
    发表于 2021-4-16 08:55 | 只看该作者
    棒棒哒,努力学习

    该用户从未签到

    6#
    发表于 2021-4-19 18:56 | 只看该作者
    学习学习              % t# ^, Z- N. L* v( r* ^
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 12:12 , Processed in 0.156250 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表