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

UART串口读取不到数据问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
uart.c
8 ]1 B7 R4 F" u5 O1 [- O2 K
* Z% i% F9 w% z7 F: v! ?9 N' ]+ z. n( ], s5 w
void USART1_Init(u32 bound){ //串口1初始化并启动8 E8 s' d; B- c8 I' d. Z
    //GPIO端口设置
2 B" ^: C/ u2 Q" A! m    GPIO_InitTypeDef GPIO_InitStructure;
7 D* @2 I8 |& I        USART_InitTypeDef USART_InitStructure;3 r: Z* r+ I$ K4 G/ H- E
0 O8 X9 t" h7 o7 V' S8 J
( |& k) T' W0 f  S# Q! e
        RCC_APB2PeriphclockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //使能USART1,GPIOA时钟9 p' H( l. c1 m4 r  p
     //USART1_TX   PA.9
6 r  V8 _0 j* l    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
1 `5 }% a* F9 R7 u    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
1 k0 Q2 G0 [) y' j& P7 u    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出9 |. O' L* E  g! Y$ n
    GPIO_Init(GPIOA, &GPIO_InitStructure);  : s! n& N5 U9 |/ g3 m
    //USART1_RX          PA.10  z& X) x5 l6 W# w
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
7 i9 j9 o2 k) p. ]/ |( e1 h7 i    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;//浮空输入
! {* \) G  j8 Q' d* B    GPIO_Init(GPIOA, &GPIO_InitStructure);
; d! v) a' r; r+ f& A! f* a9 c( Q2 I. \8 Z  x9 ^$ g

/ b9 X! J, g( P+ g. S/ d   //USART 初始化设置
/ e# w* j- w" ?5 N        USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;8 {$ p# o; q3 p6 n% w5 l
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
0 E( k% [" b; O% C% o        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
3 |0 z4 d- ~, \( L, ]- F" e        USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位& Y. p+ k6 [0 |, u: _2 I
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
& ]9 c, H/ d. }5 j: m  m$ R# |        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式. A) T6 Z$ G4 j& ^- @( ^
    USART_Init(USART1, &USART_InitStructure); //初始化串口0 P+ [/ n% |, `4 N' k
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启ENABLE/关闭DISABLE中断6 Y3 L- a0 Y- v& ^/ m
    USART_Cmd(USART1, ENABLE);                    //使能串口& D# U1 C% h8 m
}; R- I) r& g+ k3 ?) N

( e/ t2 j0 {) n+ v0 {( K

) z# k3 ^) S; M# M. m0 q& m( U- }u8 rx_buffer[20];+ x0 o* Y- u' I) b. W
u8 flag=0;
' c1 A7 O& D% H+ |u8 i=0;
( ~& c( s! {5 j+ z: _" n- \
7 p& |( o: n) h" y9 Z% Q

$ H# x2 j) n6 @- T2 C. `! r3 ovoid USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改)        
3 @9 E3 P- f7 z: l0 c9 L        u8 res;
3 [' R5 B# N5 Y# [
# \2 R# Y3 Q) F, [% c9 o

0 s0 @) S2 E9 X4 V$ ^1 X        if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)6 M- m' N. @6 h
        {        & M5 K3 |( f+ U
                res = USART_ReceiveData(USART1);               % I; l1 c" O& E# y
                if(flag != 4). c9 ~) ^8 ~! K# D
                {$ }- m# T/ s/ f" U6 `$ k' [& r2 `
                        rx_buffer[i++] = res;
* T8 Q3 w2 z, a: t; K& f                        flag ++;3 A: p" j$ K6 Y3 x% y7 |$ v7 a& @2 ^

2 G4 N! L0 l; X& C: q+ W

% p) H* z8 E' T; c1 ?                }               * r9 |! t2 B4 Z! A8 Z& ^; P
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除串口3的串口接收中断标志位( |, j6 h" b5 P+ Z! k
        }
% J% P& a2 `* U' w5 y}# o6 x0 n+ S3 d

# r& ]" v: D: D! v3 N3 B
: E  z; e' ?2 R5 c9 g3 k) r( {
5 T9 @% A8 L4 U: [8 Q
main.c$ ]  r# P9 }/ ~4 i
, f8 x* t; ]% A' ~

0 G- _8 E0 t* ?( d  |) w; ^+ `$ G8 I#include "STM32f10x.h" //STM32头文件
" ~5 g$ s6 `: ?3 f2 q( H/ _
& k3 `- b! `3 T7 u* r; j#include "delay.h"; V, I  |8 E' W+ p6 A7 f" D; L
" |+ \" y6 a' t: N* n
#include "usart.h"+ g( m6 C0 M- a$ H3 }

5 O4 w: g* O) ^* q/ D& Kextern u8 rx_buffer[];1 q0 I" s* E" G0 x' ^0 W* i. j
int main (void){//主程序
/ R( o. K' d; s5 V5 ?        u8 sum;$ q) l6 X8 L  A; ]' I, l  f
        u32 dis=0;
1 a& u" D$ M1 J# U! B# C% Q        //初始化程序
0 k; K9 O  J3 v9 e! u        RCC_Configuration(); //时钟设置5 r: I& I( f, Q8 e6 `$ `0 c

7 e, j% ]1 a/ p9 b        USART1_Init(9600); //串口初始化(参数是波特率)) d2 M7 i8 \+ q
* x4 w! G9 {8 t3 Z$ }
        //主循环( m7 k3 f1 f$ L+ w" [
        while(1){
7 A$ D; g" l) d+ `0 f3 P
7 j) \  ?, l9 Z6 q; ~sum = (rx_buffer[0] + rx_buffer[1] + rx_buffer[2]) & 0x00FF;        //A02校验和,前三项加和的低8位. ]; `# l: }) Y+ H2 t$ d
               5 Q2 D2 e) k* C5 H& j( F9 A
                if((rx_buffer[0] == 0xFF)&&(rx_buffer[3] == sum))        //帧头0XFF,帧尾校验和
& t1 a1 [, |- i* C                {
9 r6 m* Y2 ?0 p. t2 x3 K                        dis = (rx_buffer[1] << 8) + rx_buffer[2];        //数据高八位和低八位
6 c. h: F  Y6 n3 Y% M  f. q                }1 A$ s! D( I$ ?2 ?! z
        }
9 T) b- U% V) x0 D}

5 D! |! C' s. k- p2 A
  • 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 | 只看该作者
    学习学习              " E6 e7 A: k( I' y/ L& d: Z0 o4 O
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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