情况1:
void USART2_IRQHandler(void) //串口2中断服务程序
{
u8 Res;
static u8 L_Res; //Res 本次接收数据,L_Res 上次接收的数据
Res = USART_ReceiveData(USART2); //接收数据
USART_SendData(USART2,(uint16_t) Res); //发送数据(发送成功)
if(Res == 0xBB)
{
if(L_Res == 0xAA)
{
STA_START_U1 = 1; //状态标志位
C_sentbyte(Res); //发送数据(未能发送成功,但是却经过此段程序)
}
}
L_Res = Res; //记录本次数据
}
void C_sentbyte(u8 sdat) //发送数据函数
{
USART_SendData(USART2,(uint16_t) sdat);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
情况1说明:USART_SendData(USART2,(uint16_t) Res);能正常发送,C_sentbyte(Res); 不能正常发送。
情况2:
void USART2_IRQHandler(void) //串口2中断服务程序
{
u8 Res;
static u8 L_Res; //Res 本次接收数据,L_Res 上次接收的数据
Res = USART_ReceiveData(USART2);
//USART_SendData(USART2,(uint16_t) Res);
if(Res == 0xBB)
{
if(L_Res == 0xAA)
{
STA_START_U1 = 1; //状态标志位
C_sentbyte(Res);
}
}
L_Res = Res; //记录本次数据
}
情况2说明:当注释掉USART_SendData(USART2,(uint16_t) Res)后,C_sentbyte(Res)能正常发送。
程序描述:本段程序作用是检测发送过来的数据为0xaa,0xbb时,改变状态标志位,完成其他功能。
但是在测试过程中发现检测返回的数据有未发送的,状态位能正常改变,百思不得其解,望解答
本次使用的是STM32F103C8T6最小系统板。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
改为
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2,(uint16_t) sdat);
试试
任何发送前必须要判断发送是否为空,为空发送数据,不为空等待为空,再发送数据
大概知道这怎么回事了
谢谢
一周热门 更多>