STM32串口问题

[复制链接]
2407|9
 楼主| 电子write_cai 发表于 2013-8-5 15:08 | 显示全部楼层 |阅读模式
本帖最后由 电子write_cai 于 2013-8-5 15:12 编辑

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

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

  13.   USART_InitStructure.USART_BaudRate           = 115200;
  14.   USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
  15.   USART_InitStructure.USART_StopBits            = USART_StopBits_1;
  16.   USART_InitStructure.USART_Parity              = USART_Parity_No;//USART_Parity_Odd
  17.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  18.   USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;

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

  4. #ifdef  VECT_TAB_RAM
  5.   /* Set the Vector Table base location at 0x20000000 */
  6.   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  7. #else  /* VECT_TAB_FLASH  */
  8.   /* Set the Vector Table base location at 0x08000000 */
  9.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  10. #endif



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

串口数据

串口数据
黄二 发表于 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);                    /* 清发送完成标志位 */
...

不行.
人生之际 发表于 2013-8-5 18:12 | 显示全部楼层
串口有数据要发肯定发数据,没数据发的时候,就会置为TXE和TC,所以上电复位的时候TXE和TC是置位的,一开中断就回来。
建议中断在准备好缓冲区数据,要发送了,这时候Enable,就会进发送中断,然后发第一个。发完,Disable。
joypark159 发表于 2013-8-9 11:58 | 显示全部楼层
USART初始化的时候加入这句USART_ITConfig(USART3,USART_IT_TXE,DISABLE);        ,接收完成后再把TXE使能
crazy2012 发表于 2013-8-9 14:05 | 显示全部楼层
是这样的,串口如果发送完数据则产生中断标志,中断标志位置1.发送完则发送缓冲区则变成空的了,所以刚开始的时候由于BUF里面没有发送数据,里面没有数据就会认为是发送完数据了,就会触发一次中断的。
feilusia 发表于 2013-8-9 16:07 | 显示全部楼层
你把发送中断使能开了自然就会不停进中断,它本来就是这样的,你不想进发送中断就别开,直接发不就好了。
Regsen 发表于 2013-8-9 16:38 | 显示全部楼层
使用串口调试助手看看
chuangpu 发表于 2013-8-9 20:29 | 显示全部楼层
降低波特率还是不行吗   楼主   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

157

主题

1534

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部