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

串口中断的问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
写了一个STM32L151C8T6串口中断的程序,如下:0 W% l0 q7 L$ {5 u
USART_InitTypeDef USART_InitStructure;+ B; N1 B  j* Y: m! w' t7 x. A
    GPIO_InitTypeDef GPIO_InitStructure;9 a+ [; I: l  |0 q9 @
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;) v' N* U7 V& a! r
        NVIC_InitTypeDef NVIC_InitStructure;
6 H) [! f3 s, ?# ^( ~. }, t        
3 Y0 R* M  Z4 A" ]% x3 f    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);        //使能USART1
# N  g$ i" U, K5 k5 D, Q7 f    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);        //GPIOA时钟
! M% U2 T2 O2 u6 K6 r: D' C6 x# B6 K& |% i, p' A% i/ x8 N
         
' W& e$ V; @9 ?% u    delay_init(32);
9 o# K# ]! m1 K+ E1 q# ]1 }         //USART1_TX   PA9
( Y  ]$ r' c' M8 T! P    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;# C0 |3 ]0 T7 ~( O+ h+ {
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
$ p2 j& U1 k- S! Q7 W& Z; G    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;: x) V9 t  X1 i1 s) ^# x' J8 r
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;0 I, p0 U" E$ V
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        
/ s' W1 S. `( U; k" V    GPIO_Init(GPIOA, &GPIO_InitStructure);
9 B) S- V$ Y8 e" W/ b" h2 V2 Q: f0 d: ]% C9 G- f+ f9 k' e7 Z  g. X
    //USART1_RX          PA106 z1 l" B! k0 h7 A- v
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;$ O* Y( ]9 r# i0 }
    GPIO_Init(GPIOA, &GPIO_InitStructure);
9 r5 u: L3 P; E- h                4 l7 H+ h0 O# p9 T$ X- L' N5 |% B
        USART_DeInit(USART1);  //复位串口1. H9 Q, K, ~6 c
) a9 ~. e5 _( v4 w: [$ y
/ q# Q+ n5 g6 k; G9 n
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
# d2 r% R2 _% L5 k8 h4 T" A+ C" t        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
! x1 k6 G  E# W' P, {6 s0 q2 ^. I2 n/ A9 ]' q/ `/ r4 X( [
* ^! |5 H7 x. U2 e
    USART_InitStructure.USART_BaudRate = 38400;
' x9 \9 P# j, P+ C8 }    USART_InitStructure.USART_WordLength = USART_WordLength_8b;& o# N! t! R* f6 S5 L/ V' }+ F2 _
    USART_InitStructure.USART_StopBits = USART_StopBits_1;; {  r" L/ K: s8 y6 y
    USART_InitStructure.USART_Parity = USART_Parity_No;. T) ]9 D3 P+ p+ g
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;: b/ P- C4 P/ H
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
! j$ H* A  s* A; T6 T) o8 t9 u& Z6 R7 N: X* o
               
" R. o4 [! Q/ A3 {5 e( l( t# T& _1 J: n9 a
               
8 h9 n1 S, d; A- A% U               
+ H) X2 h  w& f, b# W  N        USART_Init(USART1,&USART_InitStructure);
2 Q: }5 B0 m0 [( d3 l    USART_Cmd(USART1,ENABLE);) M, M4 \! g0 [: M
  N1 J4 F3 f7 g" {& S, T3 k
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。: P7 u( ~! J# |5 {9 Q! B, {% U
/* Enable the usart1 Interrupt *// L3 L# {" {0 O( z
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
4 E. G8 X2 u* w' \( `0 b        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;$ Y* y; W2 z9 ~! `; x; O* H
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;' \" c2 U! z* {0 X. g0 M' R( I: L5 p
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
$ d$ B+ B1 J! ]5 F        NVIC_Init(&NVIC_InitStructure);
: O2 ~" ?& v) @1 i4 ~( k$ {# g* H) V9 M7 ?
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 d5 w1 Q6 R' s% M; v
//串口1接收中断: g( k3 p# I8 y2 T) l4 k$ e2 V1 \
void USART1_IRQHandler(void)                        //串口1中断服务程序) m0 i+ R: \9 ^1 g6 u& b2 g
{% s5 ^$ G9 S- I/ N8 z4 H; O
        
+ c$ z; S% B2 g& Q# p! M        
8 T# o  J( H0 N7 P: E) R//        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)                                //是否接收中断发生,使用库函数
$ w0 s$ ?+ ^+ m! j- @        if ((USART1->CR1 & (1 << 5)) && (USART1->SR & (1 << 5)))                //是否接收中断发生,使用寄存器/ a( ?# e5 n4 G7 c
        {
7 A3 G2 L$ U& v. o
" J: Z6 T& l+ \! P                Receive_Buffer[Receive_Cnt++] = USART_ReceiveData(USART1);                        //读取串口接收数据" B/ d/ n3 a0 m6 t. ~2 B0 o
               
" g$ B7 ^* I+ `# v- B- w# i7 @                if(Receive_Cnt >= 600) Receive_Cnt = 0;                                                                                                        //判断缓冲区是否已满               
3 b# G# ~# ^8 C6 [                  W  Y5 Y9 o% y' o0 Z$ R2 {
                ReceiveTime = 2;                                       
1 |& g( O5 l+ M% F  H' N4 J3 R: B        }
5 u+ h2 d. [+ d}
& f" w4 z: \( n% f
$ x) G$ z& d3 ]' S/ }发现进不了中断,各位大神看看,哪里有问题?谢谢!4 t* n- d6 q4 J9 K

该用户从未签到

2#
发表于 2020-1-3 18:21 | 只看该作者
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);                                //接收中断使能" {  B( i" v% w8 S$ M+ |  F! r
加上这一句
8 C3 E& b' o8 h: a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-28 20:31 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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