当前位置: 首页 > article >正文

STM32嵌入式编程学习到提高:【4】UART串口打印

-------------------------------------------------------------------------------------------------------------------------

工程文件:放在百度云盘里,需要的自行下载!!!
链接: https://pan.baidu.com/s/14gRne9kHhxPiXBfGEMTSgQ?pwd=xyza

提取码: xyza

-------------------------------------------------------------------------------------------------------------------------

在学习嵌入式时候,串口打印log输入输出是个很有用的工具,就像学硬件需要用到万用表,示波仪,当医生需要温度计一样。所以我们必须第一时间实现这个功能。

--------------------------------------------------------------------------------------------------------------------------

本文目标:

串口工具打印输出: "hello world!!!"

串口工具输入:“HI:”
单片机响应再输出:“How are you!!!”

----------------------------------------------------------------------------------------------------------------------------

1:创建文件: uart.c,uart.h并添加到工程

2:养成习惯,在.c文件里包含.h文件,.h里加上条件编译语句。

__UART_H__是一个约定俗成的写法,你也可以写成其它样式,需要保持唯一性,但最好这样写。

#ifndef

#define
#endif

这个是个条件编译语句,避免重复包含头文件。造成资源浪费,每个头文件都加上这几句,养成好的编程习惯。

3:接下来,我们实现第一步:打印"hello world!!!",通过前面的学习我们知道,单片机跑起来后会进入main函数,那我们就在mian里面写一个pirntf打印语句看看。

我们在while里和while外各加一个printf语句,看看打印出来后的区别,应该有点基础的同学大部分知道。这个自己观察~~~~,这个也是嵌入式一个很重要的特性!!!

4:编译一下,报警了,printf声明不合法

5:我们并没有去写printf的函数实现,也是直接用printf的库函数,所以我们需要把声明过printf函数的头文件包含进来:stdio.h

警告消除,这样就能打印了么?貌似没有这么简单,跟单片机相关的硬件我们还一点没处理呢,那软件的字符怎么就能通过硬件的特定pin传输到串口工具里去呢?

printf(); 底层调用的是fputc()库函数,这是一个weak函数,我们想用UART输出,就需要重写fputc()

/****************************************************************************************************************************************** 
* 函数名称: fputc()
* 功能说明: 重写fputc函数
* 输    入: 
*			
* 输    出: 无
* 注意事项: USART1->SR:状态寄存器,USART1->DR:数据寄存器
******************************************************************************************************************************************/
int fputc(int ch, FILE *f)
{      
	while((USART1->SR & 0X40)==0);     //发送寄存器空标志位,空:1,非空:0,发送完了接着发下一个数据,否则阻塞在这
	USART1->DR = (u8) ch;   					 //把待发送的数据写入数据寄存器,  USART1->DR 
	
	return ch;
}

6:带着上面的问题,我们得想想自己的开发板硬件,那些pin是接在uart线上的。然后,我们需要把硬件相关的设置好,这样才能正确的工作起来。

我用的开发板,用的是uart1,对应的gpio管脚是:PA9和PA10 (这里需要对照硬件设计确定管脚)

那接下来第一步,就是初始化硬件,把PA9和PA10 GPIO引脚,配成uart1工作模式,并设置中断接收(RX线上来数据的时候,MCU产生中断,中断服务函数再去处理接收到的数据)

7:编译的时候记得勾选使用微库

8:然后再下载到开发板里,然后就打印出来了log。这样我们就完成了通过uart输出log的功能

9:接下来我们看一下通过串口工具给开发板发消息,我们通过接收中断来做


http://www.kler.cn/a/324468.html

相关文章:

  • 一文详细深入总结服务器选型
  • 查询DBA_FREE_SPACE缓慢问题
  • daos集群部署(单机)
  • 支持向量机SVM——基于分类问题的监督学习算法
  • 字节青训-小M的多任务下载器挑战、版本号比较
  • Spring Boot 启动时自动配置 RabbitMQ 交换机、队列和绑定关系
  • 基于baidu的云函数实现隐藏c2真实地址
  • 企业如何做可视化数据看板
  • 物联网系统中LCD屏主流驱动方案详解
  • 华为vxlan
  • 基于VUE的在线茶叶购物网站的设计与实现后端SpringBoot数据库MySQL
  • 算法竞赛当中离散化算法的初步介绍和简单应用
  • 10_React router6
  • React Native 在 build iOS 的时候如果出现关于 `metro` 的错误
  • My_string 运算符重载,My_stack
  • JavaScript 中的闭包的形成及使用场景
  • 代码随想录_刷题笔记_第三次
  • MySQL 高级 - 第十五章 | MySQL 事务日志
  • 完全二叉树的递归创建思路及代码
  • 1Panel安装部署证书(httpsok.com)
  • matlab入门学习(二)矩阵、字符串、基本语句、函数
  • UART驱动学习一(UART硬件介绍)
  • 泛微E8JDK1.6判断时间在早上8点半到晚上六点半之间的值
  • WPF入门教学二十四 WPF性能优化
  • 机器学习与深度学习的技术比较
  • Docker网络、数据卷及安全优化