//中断函数: (可在stm32f10x_.it.c中调用)
void USART1_IRQHandler(void)
{
unsigned char RX_dat; //定义字符变量
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生接收中断
{
RX_dat=USART_ReceiveData(USART1); //接收数据
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志
USART1_Cache[USART1_End-1]=RX_dat;
USART1_End++;
}
}
就上面这些代码在串口中断1里面,软件仿真的时候USART1_End正常递增1,但是JLINK里面会递增3.
刚刚修改了上面源码,变成
//中断函数: (可在stm32f10x_.it.c中调用)
void USART1_IRQHandler(void)
{
unsigned char RX_dat; //定义字符变量
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生接收中断
{
RX_dat=USART_ReceiveData(USART1); //接收数据
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志
USART1_Cache[USART1_End-1]=RX_dat;
USART1_End++;
USART_SendData(USART1,RX_dat);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_ClearFlag(USART1, USART_FLAG_TXE);
}
}
结果发字符“1”过去,就返回0xBD,发a就返回0x7D,b就是0x7B。
而软件仿真完全正常,该1就是1,该a字符就是a字符。。。
|