前言:本来昨天打算更新I2C实验的,但是发现前天更新的串口还是存在着一些问题,并没有给读者实用性的知识,所以重新更新一下,目的是上读者能够快速上升我们的串口,因为串口这个东西虽然在平时的项目中会很少使用到,但是一个很遍历的一点就是为我们调试提供了很大的方便
最近可能更新不定,主要考虑到六级来临以及期末周复习 哭死!
目录
一.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只能选择这种方式来进行调试了,实践证明这种调试方法也很有效
期末周好好复习:奥利给,干就完事了