标题:
关于STM32串口部分程序的疑问
[打印本页]
作者:
我,菜鸡
时间:
2021-4-15 18:53
标题:
关于STM32串口部分程序的疑问
我是菜鸟,想请教各位大佬:
这是STM32串口部分的一段程序,我有几个疑问:
1.u8是定义ReceiveOK(USART_TypeDef *USARTx)为char类型用的吗?字符可以带参数USART_TypeDef *USARTx?
2.在u8 ReceiveOK(USART_TypeDef *USARTx)这段程序里*USARTx这是一个指针类型,指向USARTx?
3.return返回的值1、2、0是返回给ReceiveOK(USART_TypeDef *USARTx)这个整体吗?
4.这段程序的return 0 的部分是不是有问题,不会返回0?
//程序如下:
//接收一帧数据函数; 参数:串口; 返回值:1=ON,2=OFF,0=无效
u8 ReceiveOK(USART_TypeDef *USARTx)
{
vu32 cnt=0;
while(1)
{
RxBuffer[RxCount ++]=Receive1Byte (USARTx);
if(strstr ((char*)RxBuffer ,"ON")!=NULL ) //接收字符串中查找ON
{
RxCount =0; //为下条接收指令做好准备,否则会导致下一条指令无响应
return 1;
}
else
if(strstr ((char*)RxBuffer ,"OFF")!=NULL )
{
RxCount =1;
return 2;
}
else
if(RxCount >3)
RxCount =0; //如果接收了3字节(根据发送长度来定)但没有收到有效指令,则归零,重新接收。
cnt++;
if (cnt>100000)
return 0; //如果超时则直接返回0
}
}
作者:
黄youhui
时间:
2021-4-16 09:04
1.USART_TypeDef是一个结构体,里面包含了串口所有的寄存器。函数形参是可以传体结构体的
2.ReceiveOK(USART_TypeDef *USARTx)里面USARTx是一个指针,但不是随便一个指针是有规定的早在h文件里面定义好了,例如ReceiveOK(USART1);ReceiveOK(USART2);ReceiveOK(USART3);ReceiveOK(USART4);
3.返回值是这个函数的值, 例如 a = ReceiveOK(USART1),a的值就是return值
4.会返回0的,前提是你没发送ON也没发送OFF,然后你的函数执行这句while(1){cnt++;}100000次后寄回返回0.
给你建议else后面语句大于1句,最好加{},就算后面是if是switch
另外一个建议,你如果是初学者是菜鸟就不要深纠,知道怎么用就好了。
作者:
我,菜鸡
时间:
2021-4-16 10:51
黄youhui 发表于 2021-4-16 09:04
1.USART_TypeDef是一个结构体,里面包含了串口所有的寄存器。函数形参是可以传体结构体的
2.ReceiveOK(USA ...
好的,谢谢您的指点。我本来的打算是在例程的基础上稍微改下参数,好做一个模板,以后用的时候套着用就行。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1