IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【STM32】基于STM32F407实现串口通信 -> 正文阅读

[嵌入式]【STM32】基于STM32F407实现串口通信

一、通用同步异步收发器 (USART)

1.USART 简介

??通用同步异步收发器 (USART)能够灵活地与外部设备进行全双工数据交换,满足外部设备对工业标准 NRZ异步串行数据格式的要求。USART通过小数波特率发生器提供了多种波特率。
??它支持同步单向通信半双工单线通信,还支持LIN(局域互连网络)智能卡协议与 IrDA(红外线数据协会)SIR ENDEC 规范,以及调制解调器操作 (CTS/RTS)。而且,它还支持多处理器通信
??通过配置多个缓冲区使用DMA可实现高速数据通信。

2.USART 功能说明

??接口通过三个引脚从外部连接到其它设备。任何USART 双向通信均需要至少两个引脚:接收数据输入引脚 (RX)发送数据引脚输出 (TX)

??RX:接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪声,从而用于恢复数据。

??TX:发送数据输出引脚。如果关闭发送器,该输出引脚模式由其 I/O 端口配置决定。如果使能了发送器但没有待发送的数据,则TX 引脚处于高电平。在单线和智能卡模式下,该 I/O用于发送和接收数据(USART 电平下,随后在SW_RX上接收数据)。

正常USART模式下,通过这些引脚以帧的形式发送和接收串行数据:

  • 发送或接收前保持空闲线路
  • 起始位
  • 数据(字长 8 位或 9 位),最低有效位在前
  • 用于指示帧传输已完成的 0.5 个、1 个、1.5 个、2 个停止位
  • 该接口使用小数波特率发生器 - 带 12 位尾数和 4 位小数
  • 状态寄存器 (USART_SR)
  • 数据寄存器 (USART_DR)
  • 波特率寄存器 (USART_BRR) - 12 位尾数和 4 位小数
  • 智能卡模式下的保护时间寄存器 (USART_GTPR)

同步模式下连接时需要以下引脚:

  • SCLK: 发送器时钟输出。该引脚用于输出发送器数据时钟,以便按照 SPI 主模式进行同步发送(起始位和结束位上无时钟脉冲,可通过软件向最后一个数据位发送时钟脉冲)。RX上可同步接收并行数据。这一点可用于控制带移位寄存器的外设(如 LCD 驱动器)。时钟相位和极性可通过软件编程。在智能卡模式下,SCLK 可向智能卡提供时钟。
  • nCTS: “清除以发送”用于在当前传输结束时阻止数据发送(高电平时)
  • nRTS:“请求以发送”用于指示 USART 已准备好接收数据(低电平时)

3.USART框图

在这里插入图片描述

二、基于HAL库实现串口通信

1.工程创建

(1)新建工程
选择New Project
在这里插入图片描述
选择芯片型号,并创建工程
在这里插入图片描述

(2)设置RCC

  • 设置高速外部时钟HSE 选择外部时钟源
    在这里插入图片描述

(3)设置串口
在这里插入图片描述
在这里插入图片描述

  • 1.点击USATR1
  • 2.设置MODE为异步通信(Asynchronous)
  • 3.基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit无校验位1位停止位 ,接收和发送都使能。
  • 4.GPIO引脚设置 USART1_RX/USART_TX
  • 5.NVIC Settings一栏使能接收中断

(4)项目文件设置
在这里插入图片描述

  • 1 设置项目名称
  • 2 设置存储路径
  • 3 选择所用IDE

(5)创建工程文件
在这里插入图片描述
然后点击GENERATE CODE创建工程,完成创建。

2. HAL库UART函数库介绍

UART结构体定义

UART_HandleTypeDef huart1;

UART的名称定义,这个结构体中存放了UART所有用到的功能,后面的别名就是我们所用的uart串口的别名,默认为huart1,可以自行修改。
在这里插入图片描述
串口发送/接受函数

  • HAL_UART_Transmit();串口发送数据,使用超时管理机制
  • HAL_UART_Receive();串口接收数据,使用超时管理机制
  • HAL_UART_Transmit_IT();串口中断模式发送
  • HAL_UART_Receive_IT();串口中断模式接收
  • HAL_UART_Transmit_DMA();串口DMA模式发送
  • HAL_UART_Transmit_DMA();串口DMA模式接收

串口发送数据:

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

功能:串口发送指定长度的数据。如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。

参数

  • UART_HandleTypeDef *huart UATR的别名 如 : UART_HandleTypeDef huart1; 别名就是huart1 。
  • *pData 需要发送的数据
  • Size 发送的字节数
  • Timeout 最大发送时间,发送数据超过该时间退出发送

举例

HAL_UART_Transmit(&huart1, (uint8_t *)ZZX, 3, 0xffff);   //串口发送三个字节数据,最大传输时间0xffff

3.USART接收与发送

  • stm32f4xx_hal.c中包含#include <stdio.h>
#include "stm32f4xx_hal.h"
#include <stdio.h>
extern UART_HandleTypeDef huart1;   //声明串口
  • stm32f4xx_hal.c 中重写fgetfput函数
/**
  * 函数功能: 重定向c库函数printf到DEBUG_USARTx
  */
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}
 
/**
  * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
  */
int fgetc(FILE *f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
  return ch;
}

重写后便可以使用printf()函数和Scanf()getchar()函数

  • 修改main.c
int main(void)
{

	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();
	MX_USART1_UART_Init();

	while (1)
	{
		printf(" Hello Windows \r\n");
		HAL_Delay(1000);
	}

}
  • 编译工程
    在这里插入图片描述

    有一个警告,不影响。

  • 烧录程序
    使用FlyMcu进行烧录,设置波特率为115200
    在这里插入图片描述

  • 串口调试
    使用串口调试助手XCOM V2.0
    注意:设置波特率为115200请添加图片描述

三、总结

??本文通过STM32CubeMX创建串口例程,并使用HALUATR函数库,重定义printf函数,实现STM32系统给上位机(win10)连续发送“Hello Windows!”

四、参考

【STM32】HAL库 STM32CubeMX教程四—UART串口通信详解

【嵌入式09】STM32串口通信协议

基于 MDK 创建 STM32 汇编程序:串口输出 Hello world

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:20:51  更:2021-10-21 12:32:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:33:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码