打印

STM32通信问题

[复制链接]
1120|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2014-10-17 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void USARTy_IRQHandler(void)
{
  if(USART_GetITStatus(USARTy, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    RxBuffer1[RxCounter1++] = USART_ReceiveData(USARTy);

    if(RxCounter1 == NbrOfDataToRead1)
    {
      /* Disable the USARTy Receive interrupt */
      USART_ITConfig(USARTy, USART_IT_RXNE, DISABLE);
    }
  }
  
  if(USART_GetITStatus(USARTy, USART_IT_TXE) != RESET)
  {   
    /* Write one byte to the transmit data register */
    USART_SendData(USARTy, TxBuffer1[TxCounter1++]);

    if(TxCounter1 == NbrOfDataToTransfer1)
    {
      /* Disable the USARTy Transmit interrupt */
      USART_ITConfig(USARTy, USART_IT_TXE, DISABLE);
    }   
  }
}

中断的代码就是这样子的,USARTy就是USART1,这是网上找的~~

感觉代码应该没错,但是好像是停在发数据跟接收数据的中断里了,用串口助手发数据,接收数据成功的指示灯也没有变化。难道还要另外设置东西吗?如那个boot0和boot1的?!
沙发
LOVE_ELEC| | 2014-10-17 10:28 | 只看该作者
在判断接收或者发送中断后,清除下中断标志位试一下:
USART_ClearITPendingBit(USARTy, USART_IT_RXNE);

USART_ClearITPendingBit(USARTy, USART_IT_TXE);

使用特权

评论回复
板凳
diweo| | 2014-10-17 11:17 | 只看该作者
本帖最后由 diweo 于 2014-10-17 11:19 编辑

函数里面可以用USARTy,函数名不能用void USARTy_IRQHandler(void)呀。只能用具体的名字替代void USART1_IRQHandler(void)
因为中断向量表的名字在启动代码里定好了,其他地方得一致。

使用特权

评论回复
地板
cbsnitx| | 2014-10-17 15:15 | 只看该作者

void USARTy_IRQHandler(void)函数与中断向量表里面不一致,并在进中断后进行中断标志位的清除

使用特权

评论回复
5
vivisph| | 2014-10-17 15:49 | 只看该作者
usart1配置好了么,时钟开了么?去检查一下

使用特权

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

本版积分规则

482

主题

2214

帖子

11

粉丝