标题: 关于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