打印

STM32串口问题

[复制链接]
1708|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子write_cai|  楼主 | 2013-8-5 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 电子write_cai 于 2013-8-5 15:12 编辑

  在串口应用中,我设置了发送中断使能,并指定了串口中断向量. 可是我并没有发送数据,怎么就进入中断去了.
如代码:
1:串口的初始化
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD,ENABLE);
          GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
           RCC_APB1PeriphClockCmd (RCC_APB1Periph_USART2, ENABLE);
         /* Configure USART1 Rx (PD6) as input floating                             */
          GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;
          GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

          /* Configure USART1 Tx (PD5) as alternate function push-pull                */
          GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
          GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

  USART_InitStructure.USART_BaudRate           = 115200;
  USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits            = USART_StopBits_1;
  USART_InitStructure.USART_Parity              = USART_Parity_No;//USART_Parity_Odd
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;

  
  USART_Init(USART2, &USART_InitStructure);
  USART_ITConfig(USART2, USART_IT_TXE, ENABLE);   //ʹÄÜ·¢ËÍÖжÏ
        //USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
        
  USART_Cmd(USART2, ENABLE);
2. 设置串口中断向量
void SetupNVIC(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif



  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
3.中断向量函数
void USART2_IRQHandler(void)
{
        unsigned int Receive_data;
        printf("\r\nUSART Interrupt is occur\r\n");
        if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)  //ÅжϷ¢Éú½ÓÊÕÖжÏ
        {
                  printf("\r\nWaiting receive data\r\n");
                  Receive_data = (USART_ReceiveData(USART2) & 0x7f);
      USART_ClearITPendingBit(USART2,USART_IT_RXNE); //Çå³ýÖжϱêÖ¾
                  while(USART_GetITStatus(USART2,USART_IT_RXNE) == RESET)
                        {
             //µÈ´ýÊý¾Ý½ÓÊÕ½áÊø;
      }
                        USART_SendData(USART2,Receive_data);
  }
//USART_ClearITPendingBit(USART2,USART_IT_TXE); //Çå³ýÖжϱêÖ¾
}

未命名.jpg (1.18 MB )

串口数据

串口数据
沙发
黄二| | 2013-8-5 15:20 | 只看该作者
初始化中断之后,加入USART_ClearFlag(USART1, USART_FLAG_TC);                    /* 清发送完成标志位 */

使用特权

评论回复
板凳
uet_cache| | 2013-8-5 15:25 | 只看该作者
波特率可以稍微低一点。

使用特权

评论回复
地板
电子write_cai|  楼主 | 2013-8-5 15:49 | 只看该作者
黄二 发表于 2013-8-5 15:20
初始化中断之后,加入USART_ClearFlag(USART1, USART_FLAG_TC);                    /* 清发送完成标志位 */
...

不行.

使用特权

评论回复
5
人生之际| | 2013-8-5 18:12 | 只看该作者
串口有数据要发肯定发数据,没数据发的时候,就会置为TXE和TC,所以上电复位的时候TXE和TC是置位的,一开中断就回来。
建议中断在准备好缓冲区数据,要发送了,这时候Enable,就会进发送中断,然后发第一个。发完,Disable。

使用特权

评论回复
6
joypark159| | 2013-8-9 11:58 | 只看该作者
USART初始化的时候加入这句USART_ITConfig(USART3,USART_IT_TXE,DISABLE);        ,接收完成后再把TXE使能

使用特权

评论回复
7
crazy2012| | 2013-8-9 14:05 | 只看该作者
是这样的,串口如果发送完数据则产生中断标志,中断标志位置1.发送完则发送缓冲区则变成空的了,所以刚开始的时候由于BUF里面没有发送数据,里面没有数据就会认为是发送完数据了,就会触发一次中断的。

使用特权

评论回复
8
feilusia| | 2013-8-9 16:07 | 只看该作者
你把发送中断使能开了自然就会不停进中断,它本来就是这样的,你不想进发送中断就别开,直接发不就好了。

使用特权

评论回复
9
Regsen| | 2013-8-9 16:38 | 只看该作者
使用串口调试助手看看

使用特权

评论回复
10
chuangpu| | 2013-8-9 20:29 | 只看该作者
降低波特率还是不行吗   楼主   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:只要你是拼多多新用户就可以加我微信,微信号772880135验证您是新用户后立刻微信转你20元。欢迎朋友加我微信,多年21ic用户,诚信为本!

157

主题

1535

帖子

3

粉丝