问答

汇集网友智慧,解决技术难题

21ic问答首页 - TAG - 串口发送中断
  • 使能串口发送中断, 出现前导乱码, 问题求解

    使用芯片华大 HC32F460PETB, 每次使能 Uart 发送中断, 串口就会发送 "11 11 11 00" (HEX) 3-4 BYTE 的乱码, 这个时候还未进行中断处理, 前导乱码已经发出!向给位请教一下, 怎么处理, 消除前导乱码 /****************************************************************************** brief: 发送中断 param: None retval: None *****************************************************************************/ static void UsartTxIrqCallback(void) { uint8_t u8Data = 0u; if (Ok == RingBufRead(&m_stcRingBuf_Out, &u8Data)) { USART_SendData(USART_CH, (uint16_t)u8Data); } // 如果数据已经发送完毕,关闭发送中断,打开发送完毕中断 if (IS_RING_BUFFER_EMPTY(&m_stcRingBuf_Out)) { // 发送数据完毕,关发送中断 USART_FuncCmd(USART_CH, UsartTxEmptyInt, Disable); // 打开发送完毕中断 USART_FuncCmd(USART_CH, UsartTxCmpltInt, Enable); } } /****************************************************************************** brief: 发送完毕中断 param: None retval: None *****************************************************************************/ static void UsartTxCmpltIrqCallback(void) { // 关闭发送中断,关闭完毕中断 USART_FuncCmd(USART_CH, UsartTx, Disable); USART_FuncCmd(USART_CH, UsartTxCmpltInt, Disable); // 发送闲 0 m_u8Status = 0u;; } /****************************************************************************** brief: 启动发送中断 param: void retval: void 注: 如果忙或者为空, 就没有必要启动发送 *****************************************************************************/ void UartA_Start_Send(void) { register rt_base_t level; uint8_t u8Data = 0u; // 必须原子, 因为要支持边发边加 level = rt_hw_interrupt_disable(); if ((!IS_RING_BUFFER_EMPTY(&m_stcRingBuf_Out)) && (0u == m_u8Status)) { // 装入首字符 /*if (Ok == RingBufRead(&m_stcRingBuf_Out, &u8Data)) { USART_SendData(USART_CH, (uint16_t)u8Data); USART_FuncCmd(USART_CH, UsartTxAndTxEmptyInt, Enable); //设置状态=发送中 m_u8Status = 1u; }*/ USART_FuncCmd(USART_CH, UsartTxAndTxEmptyInt, Enable); //设置状态=发送中 m_u8Status = 1u; } rt_hw_interrupt_enable(level); }

    国产芯片 嵌入式 技术交流 串口发送中断 USART SAR

    1473浏览量 3回复量 关注量