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

UART串口读取不到数据问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
uart.c. n! e. [/ Y6 I: K  U
9 `1 T5 J& A9 `8 ~9 t+ s

/ Z& b3 l2 V6 J% cvoid USART1_Init(u32 bound){ //串口1初始化并启动
% t/ |* R( p' i6 D- x5 u    //GPIO端口设置6 @9 m! V  r; ^2 ^$ ^
    GPIO_InitTypeDef GPIO_InitStructure;
# M4 W  {& }: f5 }) @0 g6 X        USART_InitTypeDef USART_InitStructure;+ q/ E" C1 z; U
2 ?' s4 m: M! A. N4 L( v* m4 g
' h; Y; j! o! ?' @7 x- r7 k' W
        RCC_APB2PeriphclockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //使能USART1,GPIOA时钟
) A; O( [# n# U& u( `     //USART1_TX   PA.9! M! ~, ~3 c0 a! B4 v/ D
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
' A3 e5 y  P  o; K+ R' t% R4 J5 _    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;! H2 P2 g+ C) ~  |
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
8 D- |. D( u2 C% h+ N# n    GPIO_Init(GPIOA, &GPIO_InitStructure);  ' K, F; ~4 Y& e2 x' y
    //USART1_RX          PA.10
- R+ q) ~; ~& d- i" q) Z    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
' r. X7 G% A/ y    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;//浮空输入
1 {+ ~; ?7 ?+ K* _, @    GPIO_Init(GPIOA, &GPIO_InitStructure);
& i9 T* ~0 ~6 }5 N# h$ l1 C' k$ u9 c. M* U5 q& P/ E

+ e& w8 |$ R6 E  u: `3 t5 P* W( n- j   //USART 初始化设置; p4 v+ o4 n' Y/ W$ [/ i
        USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;8 F7 s( n) m; p
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
8 R* E( |) b# R3 N1 R/ t0 X        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
1 U. ?  G7 {$ q+ A" p        USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位( X9 @4 Q4 C" O- |3 D% ~
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制* D! \. w: p/ J) Q& x3 M% \
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式
, ?% a$ z% x+ A% f( [3 g* `    USART_Init(USART1, &USART_InitStructure); //初始化串口7 ~/ ^$ s5 v2 n! M! c% r
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启ENABLE/关闭DISABLE中断
0 }( J- f% s1 B& {! G" V4 C    USART_Cmd(USART1, ENABLE);                    //使能串口
8 c, i. t/ b9 K$ u# k; U}
5 L# V2 ~3 `7 f
- A3 }) w. ]4 ?2 Y+ e: X* L

8 i1 `1 ^- z, Qu8 rx_buffer[20];1 w5 o8 Q0 j, l; y- C
u8 flag=0;* ?/ `- l! ]( Q8 U3 L( U0 [
u8 i=0;- s6 s) y# V6 j8 O  r
& `# |, P% S  I9 x' e1 P# E

& t7 Q9 W) t+ j  w/ evoid USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改)        
6 H# t  ]* g5 s        u8 res;
! Z, n7 C& {$ D0 N- I! z7 r' ~4 _" f8 p/ g' a4 \& ]- b
- v: @2 ]" X$ c) V
        if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)* ]5 {, z4 ]0 W* V: X! U
        {        
3 i/ J2 T  @$ Q                res = USART_ReceiveData(USART1);               4 [; Y/ ?% C- U/ ]
                if(flag != 4)
: X0 ?1 z1 z7 ]4 z8 S9 M( }                {
* A. g- f! Z1 H6 v# a2 l% P% G                        rx_buffer[i++] = res;
4 L( e6 }6 m) P( F% u. x                        flag ++;
' @, z8 L9 M9 P2 z
" i- ]" p( G- [3 Q, [, u  i
' A# S% J3 N5 ~. q  Y/ O
                }               
# r1 F( v5 Q5 U1 j3 }' `; ]        USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除串口3的串口接收中断标志位- l- J$ Y( B' T6 ]7 E# W& d9 K
        }
/ r  u) G; M, }6 y}
/ n" L3 Y7 s: F  Q4 w1 u
" u+ D. `7 n' R5 x/ e9 p

* g, g( X" R, X9 y
! w1 n" |: X9 R0 T: F- j( ~main.c
! W2 d2 k9 r  J: e9 v3 r4 X+ s$ b0 ~, }- W. v  @9 l4 N' T/ Y
% P1 k! N1 g% _  K0 P& B1 N: y' e
#include "STM32f10x.h" //STM32头文件
: \) U) p2 G& s4 `0 l4 }/ E8 k9 T: D! T% N, K
#include "delay.h"/ O1 h: `7 m' u- ]9 V$ W2 Z8 _0 i
8 ~$ C/ y- C6 M9 @) Y
#include "usart.h"3 U5 a- K' P) [9 ^$ [: q3 H9 k
5 d; X, s" G7 `& n- @9 ~2 e: E6 H4 T
extern u8 rx_buffer[];7 X. X4 w+ U- |3 t9 X/ M# i
int main (void){//主程序
; w: Q5 X% s: m& {" |        u8 sum;5 K6 o, r, G! P
        u32 dis=0;
% }% U7 x  V& U% L        //初始化程序- g3 q7 H5 y; H* i. T/ t+ t& M
        RCC_Configuration(); //时钟设置! [; |! m6 ]; D0 J

4 F+ o+ ^# J8 F- a        USART1_Init(9600); //串口初始化(参数是波特率)
( }: E+ {6 R  F# D8 v" n3 l8 I9 R5 W! J3 B- S! A9 l
        //主循环
5 t1 {2 R0 C+ l4 Y9 L        while(1){
3 p$ z/ r& k1 m1 B6 @
$ S  R! y0 s- t4 w/ c5 dsum = (rx_buffer[0] + rx_buffer[1] + rx_buffer[2]) & 0x00FF;        //A02校验和,前三项加和的低8位
0 S- o4 ^" s7 a2 s! S               
0 e6 |$ Y' [6 L6 T# u                if((rx_buffer[0] == 0xFF)&&(rx_buffer[3] == sum))        //帧头0XFF,帧尾校验和
6 `# F2 o+ F* H                {
' @) M( q6 b" q& y! N5 Y1 D                        dis = (rx_buffer[1] << 8) + rx_buffer[2];        //数据高八位和低八位# T4 n: q' q6 G" ?* ?' i$ ?( \) N5 Z
                }
; P# H! X$ b( d" r' f        }
6 Z" y! E8 [$ o. {9 P9 U}

4 H1 q: @( g0 C7 S
  • 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 | 只看该作者
    学习学习              
    6 a) b1 J4 }6 R
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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