stm32printf显示adc测到的电压值

本文介绍了在STM32开发中,如何通过串口发送ADC转换得到的电压值到电脑,并使用XCOM工具进行查看。作者遇到乱码问题,最终通过使用printf函数成功解决。文中还探讨了如何处理ADC数据的发送,特别是如何将16位数据拆分成8位进行串口传输,并分享了将整数转换为字符的方法。此外,提到了printf重定向在串口调试中的作用。
摘要由CSDN通过智能技术生成

学习原子的视频到adc时手边没有LCD,没法直观地验证adc的结果是否正确,就想着用串口发到电脑上用XCOM看,结果调了一天都是乱码。某宝技术客服的一句“你可以试一下printf”还有不知名热心网友的“printf值得你一试”帮助我成功用串口在电脑上显示出电压值。

先看结果,再说问题

串口和adc的初始化都和原子的源码一样,就不粘了。

在while(1)里面写这个,调好波特率,打开XCOM就能看见PA1测到的电压值了。

u16 adcx;
float temp;
adcx=Get_Adc_Average(ADC_Channel_1,10);
temp=(float)adcx*(3.3/4096);
printf("\r\n%f\r\n",temp);
printf("\r\n%d\r\n",adcx);
delay_ms(100);

这个图的代码和上面的代码不一样。

注意测量的电压一定要和开发板共地!!!否则无法测量

问题:32返回ADC转换结果的函数是ADC_GetConversionValue(ADC1)这个函数返回u16即短整型的数据两个字节,然后USART_SendData()这个函数发送u8也就是字符型的数据一个字节,其实串口是一位一位的发,八位八位的存放,那如果要用串口USART_SendData这个函数向电脑发送ADC的数据

是不是必须得把整形的变成字符型的然后再放到数组里按位发送?有人告诉我说你可以高八位一发再低八位一发,收的时候再合起来,就这个问题而言,上位机(XCOM)是按照八位八位解析的,难道我要写个上位机?这不行。但是抛开问题而言这种方法可以用在下位机之间的通信。

我找了段把(int)0-9变(char)0-9的程序

#include<stdio.h>
int main(void)
{
    int number=9;  
    char charValue=number+'0';
    printf("The value is :%c",charValue);
    return 0;
}

所以如果你要发送的是纯数据而且量不大的话而且你觉得可以的话,可以用这个把每一个数字拆出来做转换再赋值给char型的数组然后一个一个发。

最后说原子在串口实验中用的printf重定向

printf能在XCOM里显示出内容应该是和这段代码有关系(我不懂这个),在usart.c里面

//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
	return ch;
}

小白一枚,欢迎大佬指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值