串口打印
串口的使用在单片机开发过程中经常出现,因为他在显示数据和调试过程中特别的方便,使用起来也很简单。
1.用STM32CubeMx配置串口
串口1模式选择异步,不开启硬件控制流(串口通信分为同步通信和异步通信,他们往往和时钟有关。)
波特率:115200(一般工业上位9600,干扰小的话波特率越大,传的越快)
数据长度:8位
校验位:无
停止位:1位
使能接收和发送
重复采样(Over Sampling):对电平状态重复采样,提高准确性,默认16 Samples,无法修改
2.生成keil工程,编写程序
public.h
串口宏定义,宏名 huart_debug 后续用于串口发送函数中
/* Public define-------------------------------------------------------------*/
#define SoftWare_Version (float)1.0
#define huart_debug huart1
public.c
在程序框架的public.c文件中,对 printf 函数进行重映射操作,重写 fputc函数(这里fputc为printf函数的底层函数,使用printf函数就是对fputc函数的调用,然后将一个个字符打印出来,我们将fputc函数重映射到串口上,所以我们的串口可以将我们想要显示的内容打印出来。)
HAL_UART_Transmit函数的第一个参数是要发送接收的串口号,第二个参数是要发送字符的指针,第三个参数是发送的字符个数,第四个参数是发送的超时时间,单位为毫秒。
/*
* @name fputc
* @brief fput映射到物理串口
* @param ch:待发送的字符
* @retval ch:已发送的字符
*/
int fputc(int ch,FILE* f)
{
//往串口1发送ch字符,每次发送1个字符,超时时间为10ms
HAL_UART_Transmit(&huart_debug,(uint8_t*)&ch,1,0x000A);
return ch;
}
3.发送字符串
MyInit.c
在自己的初始化函数中,用 printf 函数往串口1打印初始化信息
/*
* @name Peripheral_Set
* @brief 外设设置
* @param None
* @retval None
*/
static void Peripheral_Set()
{
printf("---此程序实现串口打印功能---\r\n");
printf("Initialization completed,system startup!\r\n");
printf("Software version is V%.1f\r\n\r\n",SoftWare_Version);
printf("开始运行有限状态机:\r\n\r\n");
}
System.c
系统运行函数中,串口输出状态机运行次数,输出每次运行的状态
/*
* @name Run
* @brief 系统运行
* @param None
* @retval None
*/
static void Run()
{
static uint8_t STA_Cnt = 1;
if(STA_Machine.ucSTA_Machine_Status == STA1)
{
printf("状态机第%d次运行!\r\n",STA_Cnt++);
}
switch (STA_Machine.ucSTA_Machine_Status)
{
case STA1:STA_Machine.Fun_STA1();printf("状态机状态为STA1\r\n");break;
case STA2:STA_Machine.Fun_STA2();printf("状态机状态为STA2\r\n");break;
case STA3:STA_Machine.Fun_STA3();printf("状态机状态为STA3\r\n");break;
case STA4:STA_Machine.Fun_STA4();printf("状态机状态为STA4\r\n");break;
case STA5:STA_Machine.Fun_STA5();printf("状态机状态为STA5\r\n\r\n");break;
default:STA_Machine.ucSTA_Machine_Status = STA1;break;
}
}
4.串口打印结果
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。