STM8L串口中断进不去

配置串口

void UART1_Config(void)
{
  /*Enable USART clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_USART, ENABLE);
  
  USART_DeInit();

  USART_Init((uint32_t)9600, USART_WordLength_8D, USART_StopBits_1,
                USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Rx | USART_Mode_Tx));

  /* 使能接收中断 */
  USART_ITConfig(USART_IT_RXNE,ENABLE);	

  USART_Cmd(ENABLE);
  
  /* 使能所有中断 */
  enableInterrupts();
}

中断处理

从stm8l10x_it.c中找到INTERRUPT_HANDLER(USART_RX_IRQHandler, 28)函数并填充。

/**
  * @brief  USART RX Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(USART_RX_IRQHandler, 28)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
    if(USART_GetITStatus(USART_IT_RXNE) != RESET) {
        if (recv_len > 8) {
            recv_len = 0;
        }
        recv_buff[recv_len++] = USART->DR;
        //USART_SendData8(USART->DR);
        USART_ClearITPendingBit();
    }
}

代码比较简单,就是接收中断被触发后,把数据放到一个接收缓冲区中。

问题

通过调试,发现中断没有被触发,一直进不到中断中。网上也没有相关问题。最后,找到了问题。需要在stm8_interrupt_vector.c文件中把串口接收中断注册到中断向量表中。
找到下面这行代码:

{0x82, NonHandledInterrupt}, /* irq28 */

修改为:

{0x82, USART_RX_IRQHandler}, /* irq28 */
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值