STM32F1的UART4串口配置

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

注意是UART4,不是USART4



  在stm32中UART和USART是不相同的

  USART是通用同步/异步串行接收/发送器

  UART是通用异步收发传输器


  简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。


  USART支持同步模式,因此USART 需要同步时钟信号USART_CK(如STM32 单片机),通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。


  UART需要固定的波特率,就是说两位数据的间隔要相等。 UART总线是异步串口,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上有两根线,一根用于发送,一根用于接收。 显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。


  UART是一个并行输入成为串行输出的芯片,通常集成在主板上,多数是16550AFN芯片。因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。


  作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。


  USART收发模块一般分为三大部分:时钟发生器、数据发送器和接收器。控制寄存器为所有的模块共享。时钟发生器由同步逻辑电路(在同步从模式下由外部时钟输入驱动)和波特率发生器组成。发送时钟引脚XCK仅用于同步发送模式下,发送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移位寄存器、校验位发生器和用于处理不同浈结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多浈数据无延时的通信。接收器是USART模块最复杂的部分,最主要的是时钟和数据接收单元。数据接收单元用作异步数据的接收。除了接收单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器(接收UDR)。接收器支持与发送器相同的帧结构,同时支持桢错误、数据溢出和校验错误的检测。USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。


综上可以看出,USART相对UART来说是在异步通信的基础上还有同步的功能,USART能够提供主动时钟。


  UAST4的配置

  注意:在使用UART4之前,首先要确保你的单片机是支持UART4的(我用到的单片机是STM32F103vet6),具体是否支持UART4,可以参考数据手册。同时要注意,UART4是挂载到APB1总线上的!






   初始化程序:

   为了方便调试输出,我将USART1也进行了初始化,对比一下不难发现UASRT1的初始化和UART4的初始化几乎相同


               GPIO_InitTypeDef GPIO_InitStructure;
		USART_InitTypeDef USART_InitStructure;
		
		/* config USART1 clock */
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
	  
		
               RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  
               RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
               RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE); //注意UART4是挂载在APB1总线上的,用RCC_APB1PeriphClockCmd()函数初始化!
	
		/* USART1 GPIO config */
		/* Configure USART1 Tx (PA.09) as alternate function push-pull */
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA, &GPIO_InitStructure);
	
		/* Configure USART1 Rx (PA.10) as input floating */
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
		GPIO_Init(GPIOA, &GPIO_InitStructure);
			
		/* USART1 mode config */
		USART_InitStructure.USART_BaudRate = 115200;
		USART_InitStructure.USART_WordLength = USART_WordLength_8b;
		USART_InitStructure.USART_StopBits = USART_StopBits_1;
		USART_InitStructure.USART_Parity = USART_Parity_No ;
		USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
		USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
		 
		USART_Init(USART1, &USART_InitStructure); 
		USART_Cmd(USART1, ENABLE);
		
		//³õʼ»¯UART4-TX-PC10
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOC, &GPIO_InitStructure);
//		//UART-RX-PC11
		GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

		      
		USART_InitStructure.USART_BaudRate = 9600;
		USART_InitStructure.USART_WordLength = USART_WordLength_8b;
		USART_InitStructure.USART_StopBits = USART_StopBits_1;
		USART_InitStructure.USART_Parity = USART_Parity_No ;
		USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
		USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
		
		USART_Init(UART4, &USART_InitStructure); 
		USART_Cmd(UART4, ENABLE);	
		USART_ClearFlag(UART4,USART_FLAG_TC);
		



STM32F103使用USART3/UART4乱码问题 源程序为USART1的配置,更改USART3/4相应寄存器测试,测试一直显示有规律乱码,收发不符。USART1与其余的USART使用的时钟不一样,PCLK1最高为36Mhz。初始化时PCLK=36后串口助手接收正常。 阅读详情

相关推荐

软件STM32cubeIDE下使用STM32F4xx配置uart4+DMA发送数据到串口助手-基础样例

软件STM32cubeIDE下使用STMSTM32F4xx配置uart4+DMA发送数据到串口助手(1) 叙述(2)环境(3)前言(学习思路)(4)工程配置(5)测试代码链接(6)遇到问题-踩坑的点-细节 (1) 叙述 最近因工作需要研究串口串口以前就学过,但是这次因为加上了DMA,还是让人摸不着头脑的,感觉有点无从下手。到目前为止,调通了uart4+DMA简单的数据发送,将其记录下来。 (2)环境 软件环境:STM32cubeIDE 1.7.0 硬件环境:正点原子探索者开发板-STM32F407ZGT

qq_22146161的博客 3146

STM32F103ZET6 UART4无法进入中断

调了两天UART4,现象是查询方式收发都正常。但是无法使用中断方式,仿真检查了UART4的寄存器配置完全正常,NVIC寄存器配置也正常。接收数据后NVIC的IABR也相应置位。

2022-10-3 UART4串口通信A7核(复习)

包括了发送一个字节和接受一个字节,发送和接受字符串的话就通过发送和接受一个字节的代码,一个一个去接受和发送即可。下面是功能函数部分的代码,首先是对串口的初始化,需要分析GPIO章节和UART章节。串口一共有三根线RXD:接受数据线 TXD:发送数据线 GND:接地线。最后是主函数的调用,发送一个字节的时候回显+1的字符。首先来编写串口通信的头文件代码部分。

m0_58344947的博客 361

STM32F407的UART4配置

复用PC10, PC11作为串口四的TX, RX。

zstu_zhoubenshan的博客 3542

STM32F4XX之串口

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

weixin_52483742的博客 1586

stm32 ucosii消息队列 串口_STM32F1UART4串口配置

  注意是UART4,不是USART4  在stm32UARTUSART是不相同的  USART是通用同步/异步串行接收/发送器  UART是通用异步收发传输器  简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。  USART支持同步模式,因此USART 需要同步时钟信号USART_CK(如STM32 单片机),通常情况同步信号很少使用,因此一...

weixin_39870238的博客 483

通信协议 —— 串口通信

串口,全称为串行接口(Serial Interface),是一种采用串行通信方式的硬件接口标准,主要用于设备间的简单、低速数据传输。串行接口的特点是逐位顺序发送和接收数据,即一次只传输一个数据位,在一根或者一对传输线上完成双向通信。二. RS-2322.1 基本概念RS-232(Recommended Standard 232)是最初由EIA(Electronic Industries Alliance,电子工业联盟)制定的一种串行通信接口标准。

m0_66317799的博客 1794

STM32经典五大面试题(1)

内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核;主频不同:F1的主频是72MHZ,F4的主频是168MHZ;浮点运算:F1无浮点运算单元,F4有;功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率,上下拉电阻配置,ADC精度等;内存大小:F1内部SRAM最大为64K,F4有192K(112+64+16)。

m0_62760159的博客 1276

STM32串口通信实战:从基础配置到性能优化

串口通信作为嵌入式系统的核心基础技术,通过UART/USART接口实现设备间的异步数据传输。其工作原理是将并行数据转换为串行比特流,依靠波特率同步完成信息交换。在STM32开发中,硬件USART外设集成移位寄存器和波特率发生器,显著降低CPU负载。典型应用场景包括传感器数据采集、设备调试和工业控制等。针对CH340G模块和MAX3232芯片等常见电平转换方案,需要根据抗干扰需求和成本进行选型。通过CubeMX工具配置波特率参数,结合HAL库的DMA传输与空闲中断技术,可构建高效稳定的通信系统。

weixin_28273593的博客 243

STM32F1系列波特率设置实战案例详解

手把手带你配置STM32F1系列串口波特率,从寄存器原理到CubeMX图形化设置,结合实际时钟源与分频计算,避开常见误差陷阱,确保通信稳定可靠。重点解析USARTDIV计算逻辑与波特率容差影响,让每一次串口调试都心中有数。

weixin_35811662的博客 291

STM32F4/F1 HAL库 UART DMA接收对比:3种IDLE中断处理方案与性能实测

本文深入对比STM32F4F1系列在HAL库环境下实现UART DMA不定长接收的三种典型方案,包括查询标志位基础版、回调函数重写版和超时机制增强版,并通过实测数据揭示不同芯片架构下的性能差异。重点分析了DMA+空闲中断(IDLE)组合在串口通信中的应用,帮助开发者优化嵌入式系统的不定长数据接收性能。

weixin_30443075的博客 423

蓝桥杯嵌入式实战:UART串口中断高效数据收发

本文详细讲解了蓝桥杯嵌入式竞赛中UART串口中断的高效数据收发技术。重点介绍了USART1的硬件配置、CubeMX设置、中断处理机制及数据缓冲区设计,帮助开发者掌握串口中断应用,提升系统响应速度和资源利用率,适用于嵌入式开发与竞赛实战。

s4t5u6v的博客 78

STM32串口通信配置USART1+USART2+USART3+UART4) (转)

一、串口一的配置(初始化+中断配置+中断接收函数)   1 /*===============================================================================   2 Copyright:   3 Version:   4 Author:   5 Date: 2017/11/3   6 Description:   7 配...

dcw142857的博客 3822

详解STM32CubeIDE 中 HAL库的串口中断接收函数 HAL_UART_Receive_IT

MX串口配置方法见:CubeIDE 利用自带HAL库 串口收发 一、代码自动生成以后的项目及代码结构: main.c中,调用了串口初始化 串口初始化函数赋值了串口的参数 相当于底层的初始化,配置引脚、并开启中断。 至此串口1配置完毕 二、库文件stm32f1xx_hal_uart.c内的秘密 2.1初始化 1.usart.c中,MX_USART1_U...

zateper的博客 6万+

STM32——串口UART)使用

节主要学习了STM32串口的相关知识,包括有:基本的通信方式,串口通信的基本概念,相关寄存器的设置,以及如何利用HAL进行配置,最后还实现了一个简单的实现。

m0_56399733的博客 1万+

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

前言: 今天我们学习STM32CubeMX串口的操作,以及HAL库串口配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收,本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片:STM32F407ZET6 2、STM32CubeMx软件 3、IDE: M...

Z小旋 35万+

STM32F1xx的5个串口使用方法

STM32F1系列芯片的5个串口初始化方法(有的芯片引脚少,只有3个串口串口是我们常用的一个数据传输接口,STM32F103系列单片机共有5个串口 1-3是通用同步/异步串行接口USART(Universal Synchronous/ Asynchronous Receiver/ Transmitter) 4、5是通用异步串行接口UART(Universal Asynchronous Receiver/Transmitter) 配置串口包括三部分内容: I/O口配置:TXD配置为复用推挽输出(GP

未来可期 3073

STM32F1UART

1.

江飞雪 5278

STM32UART读写及printf打印

本文以STM32F1x系列单片机为例,主要介绍了串口的初始化、串口中断、接收/发送、串口调试等内容,也顺带讲到中断分组、半主机模式以及微库MicroLIB...

马可波罗包游记 5万+
上一篇: QT实现串口通信(附源码下载)
下一篇: stm32 堆和栈(stm32 Heap & Stack)
宗师之路
博客等级 码龄11年 393粉丝 93原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值