程序代码如下,只贴出串口配置函数和串口中断处理函数
[mw_shl_code=c,true]void USART1_Config(void)
{
USART_InitTypeDef USART_InitStructure;
/* USART1 mode config */
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
//USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
USART_Cmd(USART1,ENABLE);
//USART_ClearFlag(USART1, USART_FLAG_TC);
}
void USART1_ISR(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_ClearFlag(USART1,USART_FLAG_RXNE);
//USART_ClearITPendingBit(USART1,USART_IT_RXNE);
USART1_Receive[USART1_RX]=USART_ReceiveData(USART1);
USART1_RX++;
USART1_RX&=0xFF;
if(USART1_Receive[USART1_RX-1]==0x5A) //检测到帧头0x5A
{
printf("\r\n start \r\n");
USART1_TX=USART1_RX-1;
}
if((USART1_Receive[USART1_TX]==0x5A)&&(USART1_Receive[USART1_RX-1]==0xA5)) //检测到帧头的情况下检测到帧尾0xA5
{
USART1_Len=USART1_RX-1-USART1_TX;
printf("\r\n end \r\n");
USART1_Over=1;
}
}中断处理程序实现的功能为,接收到帧头0x5a的时候,向串口发送start,接收到帧尾0xa5的时候发送end,但用串口助手调试的时候,发现只发送了start,如下图所示。本人用arm的时间不长,求大神解惑。[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
|