STM32 串口通信 - HAL库

前言:本来昨天打算更新I2C实验的,但是发现前天更新的串口还是存在着一些问题,并没有给读者实用性的知识,所以重新更新一下,目的是上读者能够快速上升我们的串口,因为串口这个东西虽然在平时的项目中会很少使用到,但是一个很遍历的一点就是为我们调试提供了很大的方便

最近可能更新不定,主要考虑到六级来临以及期末周复习        哭死!

目录

一.cubemx环境的配置 

二、MD5编码 

1.找到相关头文件,编写相关定义的函数 

 2.实现函数

 三、结果

四、总结反思 


一.cubemx环境的配置 

 https://blog.csdn.net/m0_66524150/article/details/128146357?spm=1001.2014.3001.5501

主要参考我之前写的环境配置,环境配置一样,并没有什么不同的地方 

二、MD5编码 

这里我主要将的是print在串口的重定向  以及如何在项目中使用串口进行调试

像网上的原子哥通过位操作的协议来进行通讯属实比较难以看懂,这里鉴于水平有限,不做多讲解,主要讲述如何灵活的利用print这个工具 

1.找到相关头文件,编写相关定义的函数 

/* USER CODE BEGIN Prototypes */
void USART_test();
/* USER CODE END Prototypes */


//我这里是在usart.c文件中声明函数,这是一个测试方法

 2.实现函数

注意:这里我们想要进行重定向,所以重定向这个函数我们放在usart.c中进行实现

并且我们需要实现上面的test的方法,然后最后子在main函数中进行调用测试 

第一步:引入相关的头文件,我们想要重定向的是print函数,而有C语言基础的哥们肯定知道C语言底层调用的是我们的fputc方法,所以映入相关头文件 

#include "usart.h"
#include "stdio.h"

#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (uint8_t) ch;      
	return ch;
}
#endif 

这里主要是一下  这个fputc这个函数在干嘛

它在操作DR数据寄存器,当我们向这个数据寄存器中写数据的时候,串口就会自动将我们写的数据进行发送出去,然后可以被我们接下来的串口调试助手给监视到

while空循环体是为了判断发送成功标志位,发送成功标识位会被置数,然后跳出循环体

实现test函数   按照1000ms发送一次消息,如何发送的话,那么在串口调试 助手是能够看到我们的“单片机发送消息成功”

//这里执行单片机的测试代码,看能否进行与上位机的通信
		void USART_test(){
			printf("\r\n单片机发送消息成功\r\n");
			HAL_Delay(1000);
			
		}

 最后一步:在mian函数添加我们的代码

 三、结果

 

可以看到我们测试成功,重定向成功,这样我们以后可以使用串口来进行调试了 

四、总结反思 

我们学习一个外设, 不仅仅是需要会用这么简单,因为我们最后是想要加入到我们的项目中的,而现在我对于串口的理解是可以用来进行硬件调试,而作为通信的协议的话目前已经慢慢被大家所遗忘,所以掌握串口调试是为我们程序找出bug的重要的手段

哎!没钱买jlink只能选择这种方式来进行调试了,实践证明这种调试方法也很有效

期末周好好复习:奥利给,干就完事了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值