OpenEdv-开源电子网

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

温度传感器实验显示到串口助手是乱码

[复制链接]

15

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2016-7-15
在线时间
88 小时
发表于 2016-8-12 11:49:21 | 显示全部楼层 |阅读模式
2金钱
我的温度传感器实验显示到串口助手上是乱码怎么办,怎么修改!显示部分表示有点懵逼啊!ADC设置部分,参考原子哥的
[mw_shl_code=c,true]/*ADC3õê¼»ˉ*/
void Adc_Init(void)
{
        ADC_InitTypeDef ADC_InitStructure; //3õê¼»ˉoˉêyìå
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1,ENABLE );          //ê1ÄüGPIOA,ADC1í¨μàê±Öó
  
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //·ÖÆμòò×ó6ê±ÖóÎa72M/6=12MHz

  ADC_DeInit(ADC1);  //½«íaéè ADC1 μÄè«2¿¼Ä′æÆ÷ÖØéèÎaè±ê¡Öμ

        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC1¤×÷Ä£ê½:ADC1oíADC21¤×÷Ôú¶àá¢Ä£ê½
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //Ä£êy×a»»1¤×÷Ôúμ¥í¨μàÄ£ê½
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //Ä£êy×a»»1¤×÷Ôúμ¥′Î×a»»Ä£ê½
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //×a»»óéèí¼t¶ø2»êÇía2¿′¥·¢Æô¶ˉ
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADCêy¾Yóò¶ÔÆë
        ADC_InitStructure.ADC_NbrOfChannel = 1;        //Ë3Dò½øDD1æÔò×a»»μÄADCí¨μàμÄêyÄ¿
        ADC_Init(ADC1, &ADC_InitStructure);        //¸ù¾YADC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèADCxμļÄ′æÆ÷
       
        ADC_TempSensorVrefintCmd(ENABLE); //¿aÆôÄú2¿Î¶è′«¸DÆ÷
         
        ADC_Cmd(ADC1, ENABLE);        //ê1ÄüÖ¸¶¨μÄADC1

        ADC_ResetCalibration(ADC1);        //ê1Äü¸′λD£×¼

  while(ADC_GetResetCalibrationStatus(ADC1));        //μè′yD£×¼½áêø

        ADC_StartCalibration(ADC1);         //¿aÆôADD£×¼

        while(ADC_GetCalibrationStatus(ADC1));                //μè′yD£×¼½áêø
}


/*»ñè¡ADCμÄÖμ*/
u16 get_ADC(u8 tongdao)
{
        //éèÖÃÖ¸¶¨ADCμÄ1æÔò×éí¨μ࣬ò»¸öDòáD£¬2éÑùê±¼ä
        ADC_RegularChannelConfig(ADC1, tongdao, 1, ADC_SampleTime_239Cycles5 );        //ADC1,ADCí¨μà,2éÑùê±¼äÎa239.5ÖüÆú
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //ê1ÄüÖ¸¶¨μÄADC1μÄèí¼t×a»»Æô¶ˉ1|Äü       
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//μè′y×a»»½áêø

        return ADC_GetConversionValue(ADC1);        //·μ»Ø×î½üò»′ÎADC11æÔò×éμÄ×a»»½á1û
}

/*»ñè¡ADCμÄÆ½¾ùÖμÔö¼ó׼跶è*/
u16 Get_ADC_Average(u8 tongdao,u8 cisu)
{
        u32 tsc_val=0;
        u8 t;
        for(t=0;t<cisu;t++)
        {
                tsc_val+=get_ADC(tongdao);
                delay_ms(5);
        }
        return tsc_val/cisu;
}

/* &#189;&#171;ADC&#214;μ×a&#187;ˉ&#206;a&#206;&#194;&#182;è&#214;μ1&#171;ê&#189;&#206;aT={(1.43-adc)/0.0043}+25 */
short Get_Temprate(void)       
{
        u32 adc;
        short TSC;
        double temperate;
        adc=Get_ADC_Average(ADC_Channel_16,10);        //&#182;áè&#161;í¨μà16,10′&#206;è&#161;&#198;&#189;&#190;ù
        temperate=(float)adc*(3.3/4096);                //μ&#231;&#209;1&#214;μ
        temperate=(1.43-adc)/0.0043+25;        //×a&#187;&#187;&#206;a&#206;&#194;&#182;è&#214;μ          
        TSC=temperate*=100;                                        //à&#169;′ó100±&#182;.
        return TSC;
}
[/mw_shl_code]


主函数显示部分,显示到串口上
[mw_shl_code=c,true]xtern u8 Res;
int main(void)
{       
        short temp;
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é&#206;a×é2£o2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        uart_init(115200);                 //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a115200
        Adc_Init();         //ADC3&#245;ê&#188;&#187;ˉ                        
        while(1)
                {
                        if(Res == 'a')
                        {
                                Res = 0;
                                temp=Get_Temprate();
                                /*while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , 0x30+temp/1000);*/
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , temp/100);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , '.');
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , temp%100);
                                /*while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , 0x30+temp%10);*/
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , 'C');
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , '\r');
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
                                USART_SendData(USART1 , '\n');
                    delay_ms(250);
                        }
                }         
}
[/mw_shl_code]


串口显示图片是乱码

显示乱码

显示乱码
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-12 14:30:12 | 显示全部楼层

16进制显示,打上勾,再试。

回复

使用道具 举报

0

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2016-7-18
在线时间
109 小时
发表于 2016-8-12 15:56:27 | 显示全部楼层
你发的是数字   在发送内容后面+0x30  将其变成数字对应的字符 USART_SendData(USART1 , temp/100+0x30);像这样
回复

使用道具 举报

15

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2016-7-15
在线时间
88 小时
 楼主| 发表于 2016-8-12 16:17:46 | 显示全部楼层
xuande 发表于 2016-8-12 14:30
16进制显示,打上勾,再试。

fsdfsdfs.png qqwqew.png
回复

使用道具 举报

15

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2016-7-15
在线时间
88 小时
 楼主| 发表于 2016-8-12 16:22:39 | 显示全部楼层
white_fox 发表于 2016-8-12 15:56
你发的是数字   在发送内容后面+0x30  将其变成数字对应的字符 USART_SendData(USART1 , temp/100+0x30);像 ...

没有0x30,16进制显示

没有0x30,16进制显示

有0x30,10进制显示

有0x30,10进制显示
我原来是按照自己理解的思想写的,然后乱码,后来我都改成和原子哥一样的了,就差参数一点点可是还是不行,可是我串口显示模块移植到原子哥的原代码上就能正常显示温度,真是不心甘啊,新手好失败。
回复

使用道具 举报

0

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2016-7-18
在线时间
109 小时
发表于 2016-8-12 16:27:00 | 显示全部楼层
小叶 发表于 2016-8-12 16:22
我原来是按照自己理解的思想写的,然后乱码,后来我都改成和原子哥一样的了,就差参数一点点可是还是不行 ...

你的ADC部分有问题吧
回复

使用道具 举报

15

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2016-7-15
在线时间
88 小时
 楼主| 发表于 2016-8-12 16:30:55 | 显示全部楼层
white_fox 发表于 2016-8-12 16:27
你的ADC部分有问题吧

原来是自己写的格式有点不一样,大体是对的,可是调了半天还不行,现在现在已经全部复制原子哥的了,它居然居然还是乱。。。。。。。码!伤不起啊。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-8-12 20:48:58 | 显示全部楼层
屏蔽掉其他,就留下串口部分,看看打印数据正常不
不正常的话,检查波特率设置。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 09:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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