亲测的代码:在主程序中调用Send_to_PC();
以下是中断处理函数,因为我把中断向量表移到RAM里了,所以初始化USART那些不太一样,我就不贴了,
基本过程就是RCC电源打开,GPIO端口复用打开,中断向量表跳转,USART初始化,使能,除了TXE,TE中断使能#define SEND_LENGTH 12
u32 Send_Length=0;
u8 Send_Data[SEND_LENGTH] = "abcdefg\n\r";
void Send_to_PC(void)
{
//设置好Send_Data[SEND_LENGTH]数组
//打开发送中断
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
}
void UART1Handler(void)
{
//OSIntEnter();
//处理接收到的数据
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
//发送中断
if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
{
USART_SendData(USART1, Send_Data[Send_Length++]);
if (Send_Length==SEND_LENGTH)
{
//发送字节结束
USART_ClearITPendingBit(USART1,USART_IT_TXE);
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
Send_Length = 0;
}
}
//发送完成
if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_TC);
USART_ITConfig(USART1, USART_IT_TC, DISABLE);
}
//OSIntExit();
}
|