×
嵌入式 > 技术百科 > 详情

STM8L串口中断进不去

发布时间:2020-06-03 发布时间:
|

配置串口

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 */



 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题