用stm32f103串口接收数据时怎么把接收数据做判断处理,例如接收到48-50mm输出1,接收51-53输出0

2019-07-21 03:54发布

用stm32f103串口接收数据时怎么把接收数据做判断处理,例如接收到48-50mm输出1,接收51-53输出0请大神指点交流,谢谢~

#include "usart.h"                 

void USART1_Init(u32 bound)
{
   //GPIO端口设置
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

        
        /*  ÅäÖÃGPIOμÄÄ£ê½oíIO¿ú */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX                           //′®¿úêä3&#246A9
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;            //¸′óÃíÆíìêä3ö
        GPIO_Init(GPIOA,&GPIO_InitStructure);  /* 3õê¼»ˉ′®¿úêäèëIO */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX                         //′®¿úêäè&#235A10
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;                  //Ä£Äaêäèë
        GPIO_Init(GPIOA,&GPIO_InitStructure); /* 3õê¼»ˉGPIO */
        

   //USART1 3õê¼»ˉéèÖÃ
        USART_InitStructure.USART_BaudRate = bound;//2¨ìØÂêéèÖÃ
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
        USART_InitStructure.USART_Parity = USART_Parity_No;//ÎTÆæżD£Ñéλ
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //êÕ·¢Ä£ê½
        USART_Init(USART1, &USART_InitStructure); //3õê¼»ˉ′®¿ú1
        
        USART_Cmd(USART1, ENABLE);  //ê1Äü′®¿ú1
        
        USART_ClearFlag(USART1, USART_FLAG_TC);
               
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿aÆôÏà1ØÖD¶Ï

        //Usart1 NVIC ÅäÖÃ
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//′®¿ú1ÖD¶Ïí¨μà
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇàÕ¼óÅÏ輶3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //×óóÅÏ輶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷¡¢        
}


void USART1_IRQHandler(void)                        //′®¿ú1ÖD¶Ï·tÎñ3ìDò
{
        u8 r;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï
        {
                r =USART_ReceiveData(USART1);//(USART1->DR);        //¶á衽óêÕμ½μÄêy¾Y
                USART_SendData(USART1,r);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
        }
        USART_ClearFlag(USART1,USART_FLAG_TC);
}         




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
1208
1楼-- · 2019-07-21 05:47
参考这个帖子,就可以找到答案:http://www.openedv.com/forum.php ... d=280856&extra=
Sivan
2楼-- · 2019-07-21 06:40
 精彩回答 2  元偷偷看……
1208
3楼-- · 2019-07-21 10:30
Sivan 发表于 2019-3-16 19:14
文件打不开

下载解压了没,你是那个程序打不开
Sivan
4楼-- · 2019-07-21 13:33
1208 发表于 2019-3-18 11:36
下载解压了没,你是那个程序打不开

现在能打开了,但是程序好像不太对吧,你这个不是接收数据的程序啊,明明是发送数据
1208
5楼-- · 2019-07-21 13:54
本帖最后由 1208 于 2019-3-19 18:18 编辑
Sivan 发表于 2019-3-19 17:27
现在能打开了,但是程序好像不太对吧,你这个不是接收数据的程序啊,明明是发送数据

要发送才有相应的接收,你也可以写个数组自动发,不要自己发送
Sivan
6楼-- · 2019-07-21 14:42
1208 发表于 2019-3-19 18:14
要发送才有相应的接收,你也可以写个数组自动发,不要自己发送

我的服务器直接给4G模块发送数据然后4G模块发送给串口,不用串口发送,串口只负责接收并解析数据,这个你知道怎么写吗?

一周热门 更多>