串口发送中断问题
求大老解惑,我想把{0x7e,0x00,0x01,0x02,0x03}这个数组通过串口中断发送出去,首字节0x7e直接通过查询法输出,其他字节通过中断方法发出去。程序代码如下,但是在上位机中只能显示0x7e,其他数据没传过来,不知道是什么原因。本人菜鸟一枚,求大腿帮小弟一把,万分感谢extern uint8_t TxBuffer1 = {0x7e,0x00,0x01,0x02,0x03};//定义一个传送buffer
extern uint8_t RxBuffer1[];
extern uint8_t Txcounter = 0;//定义传送长度
void main(void)
{
/* CLK configuration -----------------------------------------*/
CLK_Config();
/* UART configuration -----------------------------------------*/
UART1_Config();
UART1_Send_Data(TxBuffer1);
while (1)
{
}
}
void UART1_Config(void)
{
/* Deinitializes the UART1 and UART3 peripheral */
UART1_DeInit();
//UART3_DeInit();
/* UART1 and UART3 configuration -------------------------------------------------*/
/* UART1 and UART3 configured as follow:
- BaudRate = 9600 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Receive and transmit enabled
- UART1 Clock disabled
*/
/* Configure the UART1 */
UART1_Init((uint32_t)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
/* Enable UART1 Transmit interrupt*/
UART1_ITConfig(UART1_IT_TXE, ENABLE);
/* Enable general interrupts */
enableInterrupts();
}
INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
{
if(UART1_GetITStatus(UART1_IT_TXE) != RESET)
UART1_ClearITPendingBit(UART1_IT_TXE);
UART1_SendData8(TxBuffer1);
Txcounter++;
if(Txcounter == 5)
{
UART1_ITConfig(UART1_IT_TXE, DISABLE);
}
}
楼主为何如此处理发送?
要么全部中断发送,要么全部查询发送。 中断不是处理数据发送之处,为何这么多工程师不晓得呢?中断处理的基本要求是简单,够快,及时清理。 大体上逻辑没什么问题,运行的结果就是前面多了个7e。1.你先发送7e,但是你中断中先取的值还是7e。 2. 用示波器检查一下波特率对不对。3. 如果使用外部晶振(当然产品也应该使用),注意配置波特率时,外部晶振值HSE_VALUE是预先定义的,不是自动检测计算的。希望能帮到你:) UART1_ClearITPendingBit(UART1_IT_TXE);
这里不应该是ClearFlag吗 两个函数差不多,只是判断条件一个是通过中断使能条件,另一个通过标志位置位判断。只要应用逻辑符合设定中断就是一样的。
页:
[1]