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

串口中断的问题?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-1-3 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
写了一个STM32L151C8T6串口中断的程序,如下:
9 T- d- W9 g8 o* d( I' EUSART_InitTypeDef USART_InitStructure;# Y7 p$ `4 R  z. _8 N! I# T* X
    GPIO_InitTypeDef GPIO_InitStructure;
* J8 c$ D: h. v7 k7 ]* ?        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;# |& J5 E1 {& y' Y& K9 v1 ?
        NVIC_InitTypeDef NVIC_InitStructure;
: _+ f# h/ g, y0 m% Y        / H! |% _4 ?% s. a3 W
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);        //使能USART1
! ?: w+ Z; R% m! i2 r    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);        //GPIOA时钟7 v( y9 m; V$ Q

% N5 `9 u! Y, }9 S         
2 N3 L: q7 S8 L7 U/ h    delay_init(32);4 g/ M8 [# C1 m
         //USART1_TX   PA9' M. _3 q9 z& o6 D8 c$ A
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;: F/ i9 e2 c% s. P7 T0 l
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
! }" h/ ?. [% c; T    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
* W+ H. T# Q2 S$ g    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;( ]1 t4 ~# K/ L8 O5 l% A6 O) C& P
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        : e7 i) I& B6 g5 s
    GPIO_Init(GPIOA, &GPIO_InitStructure);
2 f9 q- n5 n0 u' b
& i% E3 N" }9 A, o8 w) w    //USART1_RX          PA10
1 X4 s# N9 j6 O# [$ |! T    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;" [& L: j, ]* O* U6 a
    GPIO_Init(GPIOA, &GPIO_InitStructure);
3 n0 w3 I) \7 a$ W               
+ M3 b6 X- H6 C% w6 C: l        USART_DeInit(USART1);  //复位串口1! t) y" ]- n4 N6 [$ Z& W, G

# \5 h) {* S0 m1 H
* @7 t3 K9 `8 [5 P        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
. G8 N% r! r3 i) j% N        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);: ?% w* |, g1 ^/ c: ~; u
5 |% K, z7 Q5 p* A
3 |1 C! p  h; N
    USART_InitStructure.USART_BaudRate = 38400;
& ~1 q9 V* N- L7 f    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
1 ^# H5 c7 ~4 {( ]    USART_InitStructure.USART_StopBits = USART_StopBits_1;8 q% W8 ?9 {" o* G$ [+ W) @* F
    USART_InitStructure.USART_Parity = USART_Parity_No;3 T- {4 G  i) m6 V6 _
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
, B2 r# S6 U& G/ F, |    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;8 l. o& ?4 s  u, l

. U2 f7 B5 e, n( B" B, {3 t& G               
; [3 A6 J) z7 ^& i. {7 K/ v: {/ n
, m; D  T1 ^3 A  v. P' L- ]% j               
# }& |: L% A0 f8 F; h8 [- U* w8 n' [               
2 V$ S# K- ~9 J; B4 c2 f        USART_Init(USART1,&USART_InitStructure);
" {5 ?- o/ r& ]% T    USART_Cmd(USART1,ENABLE);6 v5 H, D" d6 N5 [# R- C$ j4 Y; L
  E' {# R  U9 {4 |  z# N' S
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
. q+ R# _; c) W& N, k9 r/* Enable the usart1 Interrupt */0 t. `6 c. s1 c/ l7 m
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;7 r9 w& p( b  H8 ~8 r
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
2 P# W( `) o$ l0 r2 m6 l/ A/ T        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;; z% D, A/ E) y6 q) g( h5 k% W5 E0 ]
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;4 N( e. V& V5 O& I4 |
        NVIC_Init(&NVIC_InitStructure);
+ Q1 I: z$ u4 i  f& f3 S' h; j5 ?8 a! C0 {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 U! _$ g1 y# Y) ?
//串口1接收中断
, c- X, ]6 n9 a& \  c# o& m5 Ivoid USART1_IRQHandler(void)                        //串口1中断服务程序. C- O& L6 k: C. D5 i9 d  W: c
{  l1 M$ N. m* F0 x& p) T
        5 W% y% Z. `+ L) F
          D9 y  a/ V: J3 |' \  N& t' _
//        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)                                //是否接收中断发生,使用库函数
: G, M; l+ S$ [9 F        if ((USART1->CR1 & (1 << 5)) && (USART1->SR & (1 << 5)))                //是否接收中断发生,使用寄存器! F. r* N7 t' V
        {5 T: P; w  \* O, w8 u/ U

5 Y2 l; l$ Y' H' Z                Receive_Buffer[Receive_Cnt++] = USART_ReceiveData(USART1);                        //读取串口接收数据
$ H# o8 [: J# ~* [. ~3 R% t. {8 z% B" l/ t% v               
% h$ ?& V; W7 V$ i- L5 s                if(Receive_Cnt >= 600) Receive_Cnt = 0;                                                                                                        //判断缓冲区是否已满                8 f5 D0 M) i' x, i/ e  r
               
$ G" l7 s) I0 M+ b; T  u  n                ReceiveTime = 2;                                        5 U3 |1 P8 o0 y
        }
2 G$ s% n9 ]1 [8 r. m}
, [' _0 f9 e1 c' {0 d7 B2 [: _3 z" U7 N
发现进不了中断,各位大神看看,哪里有问题?谢谢!1 }7 S& x( F/ {, b( k# b

该用户从未签到

2#
发表于 2020-1-3 18:21 | 只看该作者
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);                                //接收中断使能
0 l0 E$ i; |  W! X7 P8 H8 V加上这一句3 ]. Y9 p/ o  Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 13:43 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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