STM32实战项目-串口打印
创始人
2024-05-31 02:52:23
0

前言:

本小结主要实现串口打印功能,主要将上一结的状态机运行次数,通过串口在串口终端上打印出来,硬件电路上主要是TTL转USB驱动电路,软件上主要有状态机函数,串口发送函数等调试工具是串口助手。


目录

1.硬件电路

2.串口讲解 

 2.1定义

2.2协议

 3.软件编程

3.1参数配置 

 3.2程序结构

3.2.1程序框架

 3.2.2打印配置

3.2.3串口发送配置 

 4.效果展示



1.硬件电路

主要集成TTL转USB驱动,插入MicroUSB线即可使用。

2.串口讲解 

 2.1定义

UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收

在单片机产品设计中,UART主要用于设备与设备之间的通讯,设备与传感器之间的通信。例如通过RS-485接口,构成工业设备系统总线。

2.2协议

 UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。

其中各位的意义如下:

起始位:先发出一个逻辑"0"的信号,表示传输字符的开始。

数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符,从最低位开始传送。

奇偶校验位:数据位加上这一位后,使得"1"的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。(一般这个位可以不设置,减少位数,提高传输数据量)

停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。(一般设置为1位高电平)

空闲位:处于逻辑"1"状态,表示当前线路上没有资料传送。

波特率:衡量数据传送速率的指标。表示每秒钟传送的比特位。(不同使用场景设置不同波特率,对数据要求准确,较少传输速率)

图示如下:

 3.软件编程

3.1参数配置 

 串口打印函数需要配置串口参数,我们需要配置cubemax相关参数,主要是串口的引脚,波特率,有效数据个数,停止位,采样次数,奇偶校验位,主要配置如下:

 3.2程序结构

3.2.1程序框架

 

 整体框架没有发生变化,配置完串口之后,会自动生成串口源文件。且源文件中会自动生成我们配置好参数的代码:

void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}}

 3.2.2打印配置

我们要实现串口显示状态机运行次数,首先我们需要在run函数部分增加打印函数,这样才可以通过串口发送到终端显示,代码如下:

 

static void Run()
{static uint16_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; }
}

为了方便清晰观察,我们可以在初始化部分,将版本号,测试说明放进去,具体代码如下:

static void Peripheral_Set(void); /* Public variables-----------------------------------------------------------*/
MyInit_t MyInit = 
{Peripheral_Set
};/* Private function prototypes------------------------------------------------*/      /** @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");
}

3.2.3串口发送配置 

我们想使用串口发送函数,就要明白这个函数如何使用,以及传参的设置,该函数具体如下:

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

huart为串口号,pData是发送数据地址 需要注意的是 类型是八位的,Timeout是发送时限,超出这个时间,就是超时,需要重传。我们可以利用fput函数进行发送,具体代码如下:

int fputc(int ch,FILE* f)
{//查询方式循环发送HAL_UART_Transmit(&huart_debug, (uint8_t *)&ch, 1, 0x000A);return ch;
}

 4.效果展示

 

 

 

 

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...