前言
STM32------串口
提示:以下是本篇文章正文内容,下面案例可供参考
一、串口概述
1.定义
串口通信是一种设备间非常常用的串行接口,以比特位的形式发送或接收数据,电子工程师经常使用这种方式来调试数据。
2.开发板硬件与PC相连
注意事项: 使用到usb转串口,所以得安装CH340驱动 跳线帽要进行短接。 原理图:
3.帧格式
示例: 串口3工作在9600bps,连续发送0xA9(MSB:最低有效位优先传输),使用usb逻辑分析仪等到下图分析结果。
4.流控
数据在两个串口之间进行通讯的时候常常会出现丢失数据的现象,比如两台计算机或者是一台计算机和一个单片机之间进行通讯,当接收端的数据缓冲区已经满了,这个时候如果还有数据发送过来,因为接收端没有时间进行处理,那这样的数据就有可能会丢失。在工业现场或者其他领域,经常会遇到这种问题,本质原因是速度不匹配、处理能力不匹配。比如单片机的主频只有20M或30M,ARM的处理能力可能是200M,PC机的处理能力是几个G,这种处理能力的不匹配造成了传输的时候数据容易丢失。
硬件流控就是来解决这个速度匹配的问题。它的基本含义非常简单,当接收端接收到的数据处理不过来时,就向发送端发送不再接收的信号,发送端接收到这个信号之后就会停止发送,直到收到可以继续发送的信号再继续发送。因此流控本身是可以控制数据传输的进度,进而防止数据丢失。
一般常用的流控方式有两种:硬件流控和软件流控。
二、库函数
1.很多模块默认出厂的硬件参数配置如下:
代码如下(示例):
配置串口,遵循“9600,N,8,1”。
波特率:9600bps
无校验位:N
数据位:8
停止位:1
对于ARM的高速芯片,波特率默认上浮到115200bps。
2.代码初始化思路:
代码如下(示例):
a.硬件时钟
端口A硬件时钟使能
串口1硬件时钟使能
b.硬件配置
引脚配置为复用功能模式
引脚连接到串口1硬件
配置串口相关参数:波特率、校验位、数据位、停止位
配置串口中断
编写中断服务函数
c.硬件控制
串口1发送数据
串口1读取数据
三、重定向printf
1.概述
#pragma import(__use_no_semihosting_swi)
#include "stm32f4xx.h"
#include <stdio.h>
struct __FILE { int handle; };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) {
return (ITM_SendChar(ch));
}
void _sys_exit(int return_code) {
label: goto label;
}
2.关键分析
pragma用于指示编译器完成一些特定的动作。
#pragma import(__use_no_semihosting_swi)
在嵌入式程序编译时如果出现printf、fopen、fclose等文件操作,因程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosting_swi这个声明,使程序遇到这些文件操作函数时不停在此中断处。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了STM32------串口,而STM32的其他一些使用模块,请各位大神移步本博主其他文章或是关注博主等待后续发布。
|