STM32的USART串口通信

本文介绍了STM32的USART串口通信,包括串口通信标准、波特率、起始和停止信号,以及如何使用STM32进行串口通信。同时,文章还讲解了C语言中的全局变量、局部变量、堆和栈的概念,并通过实例展示了STM32中不同变量的存储地址分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、串口通信简介

1.两种电平标准TTL标准:当电平处于2.4~5V之间时,表示逻辑1;当电平处于 0 ~0.5V时,表示逻辑0。
RS-232标准:当电平处于-15~-3V之间时,表示逻辑1;当电平处于3 ~15V时,表示逻辑0。

2.RS-232标准的传输距离及抗干扰能力更好。重点是两种标准的转换。
USB转串口通讯
USB转串口主要是设备跟电脑通信,该过程需要电平转换芯片来实现,常用的芯片有CH340,PL2303,CP2102,FT232。使用的时候需要安装电平转换芯片的驱动。

3.原生的串口到串口
主要是控制器跟串口设备或者传感器通信,不需要电平转换芯片来转换电平,直接使用TTL电平通信。例如GPS模块。

4.波特率与比特率
波特率即每秒钟传输的码元个数,便于对信号进行解码。常用的波特率4800,9600,115200。比特率即每秒钟传输的二进制位数。

5.通讯的起始和停止信号
起始信号由逻辑0的数据位表示,停止信号可由0.5,1.5,1或2个1的数据位来表示。双方自行约定。

6.校验
通过校验码来避免数据在传输过程中,受到外部干扰而发生偏差。常采用奇偶校验,只能检测出发生偏差位的1位。
在这里插入图片描述

二、使用stm32芯片进行串口通信

要求:
(1)设置波特率为115200,1位停止位,无校验位。
(2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。
(3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
参考程序:原程序
1.这程序和我们的要求还不符合,我们还需要改一下
具体改一下main函数,中断函数和发送函数。具体如下
main函数 修改如下
在这里插入图片描述

#include "stm32f10x.h"
void Delay_ms(volatile unsigned int t)	
{
   
	unsigned int i,n;
	for(n=0;n<t;n++)
		for(i=0;i<800;i++);
}


int main(void)
{
   

	User_USART_GPIO_Config();
	User_NVIC_Config();
	User_USART_Config();

	User_UART_Send_String(USART1, "abcdefg!\n");

	while(1)
	{
   
     User_UART_Send_String(USART1, "hello windows!\n");
     Delay_ms(5000);
	}








}

中断函数修改如下:

void SysTick_Handler(void)
{
   
}


//中断服务函数,前面在User_USART.c  void User_USART_Config(void)函数中
//USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);使能了数据接收中断,所以
//将处理接收数据时的中断服务
	int i=0;
	uint8_t a[11];
void 
### STM32 USART 串口通信使用 CubeMX 配置教程 #### 一、项目创建与MCU选择 启动STM32CubeMX软件并新建一个工程,输入项目名称以及保存路径之后点击下一步。在产品选型界面通过筛选条件找到对应的单片机型号完成微控制器的选择[^1]。 #### 二、时钟配置 进入Clock Configuration选项卡调整PLL参数使得系统核心频率达到预期值;对于USART外设而言通常也需要设定其工作时钟源及其分频系数从而满足波特率计算需求。 #### 三、引脚分配 切换到Pinout & Configuration标签页,在Connectivity分类下拉列表里定位至USART模块,双击开启对应资源后按照实际硬件连接情况指定TX/RX信号所使用的物理管脚编号,并确认这些IO端口的工作模式被自动更改为Alternate Function Push-Pull形式。 #### 四、中间件及功能库集成 前往Middleware板块勾选Standard Peripheral Library或者HAL Driver以便后续编程调用API接口函数简化开发流程。如果计划利用RTOS或者其他高级特性则同样在此处添加必要的组件支持。 #### 五、初始化代码生成前的额外设置 当涉及到DMA传输机制时需特别注意:为了启用多缓冲区通讯方式应该适当修改USART_CR3寄存器内的DMAT位状态为有效(即允许发送方向上的直接存储访问操作),与此同时参照具体应用场景合理规划DMA通道数目及相关属性配置以确保数据流顺畅无阻地往返于内存空间同UART设备之间[^2]。 #### 六、自动生成框架结构 一切准备就绪以后返回Project Manager页面填写好编译环境细节信息比如工具链版本号之类的内容最后按下GENERATE CODE按钮等待片刻即可获得一份完整的裸跑程序模板文件夹。 ```c // 示例代码片段展示如何初始化USART并发送字符串 #include "usart.h" void MX_USARTx_UART_Init(void){ huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK){ Error_Handler(); } } char message[]="Hello World!"; if(HAL_UART_Transmit(&huart1,(uint8_t*)message,strlen(message),HAL_MAX_DELAY)!= HAL_OK){ // 发送失败处理逻辑 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值