OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3431|回复: 20

串口接收到的感应器数据距离12mm,怎么去掉mm直接显示数字?

[复制链接]

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
发表于 2019-2-13 21:47:21 | 显示全部楼层 |阅读模式
10金钱
#include "usart.h"                 

/*******************************************************************************
* oˉ êy Ãû         : USART1_Init
* oˉêy1|Äü                   : USART13õê¼»ˉoˉêy
* êä    èë         : bound:2¨ìØÂê
* êä    3ö         : ÎT
*******************************************************************************/
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¼Ä′æÆ÷¡¢       
}

/*******************************************************************************
* oˉ êy Ãû         : USART1_IRQHandler
* oˉêy1|Äü                   : USART1ÖD¶Ïoˉêy
* êä    èë         : ÎT
* êä    3ö         : ÎT
*******************************************************************************/
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);
}        





最佳答案

查看完整内容[请看2#楼]

USART_SendData(USART1,r); 修改成 if('m' != r) { USART_SendData(USART1,r); while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET); } 前面的是卡在while那边了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2013-7-25
在线时间
52 小时
发表于 2019-2-13 21:47:22 | 显示全部楼层
USART_SendData(USART1,r);
修改成
if('m' != r)
{
        USART_SendData(USART1,r);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
}
前面的是卡在while那边了。
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2019-2-14 09:57:12 | 显示全部楼层
你连MM这个在哪都不知道,发了个串口配置程序。
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-14 10:48:35 来自手机 | 显示全部楼层
douxiaolingyun 发表于 2019-2-14 09:57
你连MM这个在哪都不知道,发了个串口配置程序。

以上程序中r接收到的感应器距离12mm 或者13mm是实时输出的,是一直接收的程序我想让它变为实时输出的数字12或者13,请大神指导
回复

使用道具 举报

5

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2013-7-25
在线时间
52 小时
发表于 2019-2-14 11:04:25 | 显示全部楼层
USART_SendData(USART1,r);
修改成
if('m' != r) USART_SendData(USART1,r);
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2019-2-14 11:23:59 | 显示全部楼层
我给你个例子吧! 可以将你接收到的数据放在一个buff里面,可以用sscanf函数将buff里的数据中的MM给去除掉。
例如接收到 12MM,放在rec_buf中,取其中的1-9的数据放在temp中,temp就是12

sscanf(rec_buf, "%[1-9]",&temp);
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-14 11:47:06 来自手机 | 显示全部楼层
summer_fly 发表于 2019-2-14 11:04
USART_SendData(USART1,r);
修改成
if('m' != r) USART_SendData(USART1,r);

多谢指导,一会写进去看看结果。
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-14 11:48:05 来自手机 | 显示全部楼层
douxiaolingyun 发表于 2019-2-14 11:23
我给你个例子吧! 可以将你接收到的数据放在一个buff里面,可以用sscanf函数将buff里的数据中的MM给去除掉 ...

谢谢指导,一会写进去看看结果。
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-14 14:38:10 来自手机 | 显示全部楼层
summer_fly 发表于 2019-2-14 11:04
USART_SendData(USART1,r);
修改成
if('m' != r) USART_SendData(USART1,r);

不行呀,程序刚开始会输出1?然后就没了,怎么解?
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-14 14:39:45 来自手机 | 显示全部楼层
douxiaolingyun 发表于 2019-2-14 11:23
我给你个例子吧! 可以将你接收到的数据放在一个buff里面,可以用sscanf函数将buff里的数据中的MM给去除掉 ...

编译没有通过,显示1个警告,运行没有效果怎么解?
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2019-2-14 15:24:57 | 显示全部楼层
要加入头文件 #include <stdio.h>
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-14 17:22:33 来自手机 | 显示全部楼层
douxiaolingyun 发表于 2019-2-14 15:24
要加入头文件 #include

还是不行,编译显示错误
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-14 18:56:23 来自手机 | 显示全部楼层
summer_fly 发表于 2019-2-14 11:04
USART_SendData(USART1,r);
修改成
if('m' != r) USART_SendData(USART1,r);

能给我讲下这段的意思吗?还请帮忙指导。
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2019-2-15 17:04:21 | 显示全部楼层
你还是先把程序全部看懂,自然而然就知道怎么改了。我只是给你提供一个思路,你还指望给你个代码就能用吗??
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-15 19:36:38 | 显示全部楼层
douxiaolingyun 发表于 2019-2-15 17:04
你还是先把程序全部看懂,自然而然就知道怎么改了。我只是给你提供一个思路,你还指望给你个代码就能用吗? ...

多谢批评指导,谢谢了
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-15 19:37:22 | 显示全部楼层
summer_fly 发表于 2019-2-15 16:06
USART_SendData(USART1,r);
修改成
if('m' != r)

谢谢指导,辛苦了,明天我在验证下吧。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-2-16 01:03:42 | 显示全部楼层
这个自己想办法吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-16 07:51:13 来自手机 | 显示全部楼层
正点原子 发表于 2019-2-16 01:03
这个自己想办法吧

嗯嗯,好的谢谢原子哥教导。
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-16 15:33:36 来自手机 | 显示全部楼层
summer_fly 发表于 2019-2-15 16:06
USART_SendData(USART1,r);
修改成
if('m' != r)

还是不成功,无法输出。设备无反应,然后我试了再次转换为10进制但是不成功。截取,转换,还是不行,好崩溃。还有下边这种方法也用了,还是不行。
IMG_20190216_153243.jpg
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-16 21:14:55 | 显示全部楼层

已调试ok
回复

使用道具 举报

9

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2019-1-3
在线时间
34 小时
 楼主| 发表于 2019-2-16 21:15:25 | 显示全部楼层
彩虹桥 发表于 2019-2-16 15:33
还是不成功,无法输出。设备无反应,然后我试了再次转换为10进制但是不成功。截取,转换,还是不行,好崩 ...

已调试ok
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 12:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表