一、摘要
- 为了便于我们调试,我们这一章节介绍如何配置串口通信,以及将printf重定向到串口输出
- 配置完成后我们接着上一章节ADC采集的内容,将ADC采集的数据打印输出,这样就可以直观在的串口助手上看到这些数据了
二、硬件连接
- 我们可以使用如下图所示的各种USB转TTL的工具连接单片机(图片来源与网络)
- 连接方式
如图所示:我们的PCB板子上已经预留了串口的四根排针,按照下面的方法与串口工具连接;
单片机TXD–串口工具RXD;
单片机RXD–串口工具TXD;
单片机GND–串口工具GND;
如果不需要使用串口供电可以不连接3.3V。
三、CubeMX配置
- 波特率:表示一秒钟传输多少数据,这里我们改一个我们想要的波特率就可以了,我使用115200Bits/s。;
- 字长:一帧通信内容有多少位;
- 校验位:为了防止数据出错可以加校验位,这里我们没有加;
- 停止位:每一帧最后一位为停止位,表示一帧的结束;
生成代码:
打开Keil选择是重新编译:
四、串口程序介绍
- 串口基本函数
打开这个.h文件的最下面会看到所以关于串口的函数,如果你不知道或者忘记某个想要用的函数在这里可以找到
我们复制串口发送函数到main函数:
编译完成烧录到单片机,打开串口助手:
注意这里只能十六进制显示:
如何选择COM口:
右击此电脑打开管理:
设备管理器中的端口里面可以找到我们连接的设备:
使用CH340 串口工具的朋友是这样的:
- printf重定向
这里你可以将这段代码放在uart.c,也可以放在main.c,我为了main.c更整洁一些放在uart.c最后面
注意:不要忘记头文件
注意:下图中这个地方要勾选:
函数代码:
printf重定向函数
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
- 实际使用
代码:
mian.c
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Value,50);//启动DMA搬运ADC
HAL_Delay(20);//延时
ADC1_Value_average();//计算ADC五个通道各采集十次的平均值
printf("%d,%d,%d,%d\r\n",left_x,left_y,right_x,right_y);//将俩个摇杆四个方向的数据打印出来
串口输出结果:
此时摇杆都在中间,理论上四个数字都为4096/2=2048(我们的ADC为12位ADC最大为2^12=4096),但是我们使用的这种普通电阻式摇杆误差很大,所以为1900多;
你可以推动摇杆看数据的变化:
五、结语
ok,我们可以看到配置好串口后我们调试起来更加直观了,之后我们其他地方也会用到串口调试,如果有不正确的地方欢迎各位在评论区、或者私信指出,下一章再见。