中断接收标准库
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
封装函数使用
1、发三遍包尾ff ff ff HMISendb(0xff)
//字节发送函数
void HMISendb(u8 k)
{
u8 i;
for(i=0; i<3; i++)
{
if(k != 0)
{
USART_SendData(USART1,k); //发送一个字节
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待发送结束
}
else
{
return ;
}
}
}
2、发送字符串 HMISends(字符串)
//字符串发送函数
void HMISends(char *buf1)
{
u8 i=0;
while(1)
{
if(buf1[i] != 0)
{
USART_SendData(USART1,buf1[i]); //发送一个字节
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待发送结束
i++;
}
else
{
return ;
}
}
}
stm32发
文本控件赋值
char data01[100];
sprintf(data01,"t1.txt=\"发送的变量为:%d\"",a);
HMISends(data01);
HMISendb(0xff);
数字控件赋值
char data02[100];
sprintf(data02, "n0.val=%d\xff\xff\xff", a);
HMISends(data02);
跨界面赋值
char data03[100];
sprintf(data03,"页面.count.val=%d\xff\xff\xff",a);
HMISends(data03);