初级会员

- 积分
- 110
- 金钱
- 110
- 注册时间
- 2018-7-25
- 在线时间
- 15 小时
|
10金钱
情况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最小系统板。
|
-
-
最佳答案
查看完整内容[请看2#楼]
USART_SendData(USART2,(uint16_t) sdat);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
改为
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2,(uint16_t) sdat);
试试
任何发送前必须要判断发送是否为空,为空发送数据,不为空等待为空,再发送数据
|