STM32标准库开发——串口发送/单字节接收

这篇具有很好参考价值的文章主要介绍了STM32标准库开发——串口发送/单字节接收。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

USART基本结构

STM32标准库开发——串口发送/单字节接收,stm32,单片机,嵌入式硬件

串口发送信息

启动串口一的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

初始化对应串口一的时钟,引脚,将TX引脚设置为复用推挽输出。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);

配置串口一配置寄存器,设置波特率为9600,关闭硬件流控,不使用校验位,数据长度为八字节

USART_InitTypeDef  USART_InitStruct;
USART_InitStruct.USART_BaudRate=9600;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode=USART_Mode_Tx;
USART_InitStruct.USART_Parity=USART_Parity_No;
USART_InitStruct.USART_StopBits=USART_StopBits_1;
USART_InitStruct.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStruct);

封装串口发送字节函数

void Serial_SendByte(uint8_t Byte)
{
	USART_SendData(USART1,Byte);
	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)== RESET);	
}

封装串口发送字符串函数

void Serial_SendString(char *String)
{
	uint8_t i;
	for (i=0;String[i]!='\0';i++)
	{
		Serial_SendByte(String[i]);
	}
}

封装串口发送数组函数

void Serial_SendArray(uint8_t *Array,uint16_t Length)
{
	uint16_t i;
	for (i=0;i<Length;i++)
	{
		Serial_SendByte(Array[i]);
	}
}

封装串口发送数字函数

uint32_t Serial_Pow(uint32_t x, uint32_t y)
{
	uint32_t Result = 1;
	while(y--)
	{
		Result *= x;
	}
	return Result;
}
void Serial_SendNumber(uint32_t Number, uint8_t Length)
{
	uint8_t i;
	for(i=0; i<Length; i++)
	{
		Serial_SendByte(Number / Serial_Pow(10,Length-i-1)%10);
	}
}

进阶一:重定向print输出到串口中

/*
 fputc是print函数的底层所以,修改底层文件就能将print输出重定向到串口。
*/
int fputc(int ch, FILE  *f)
{
	Serial_SendByte(ch);
	return ch;
}

进阶二:封装Serial_Sprintf完成串口输出功能

/*
char String[100];
sprintf(String,"Num=%d\r\n",666)
Serial_SendString(String);
等价于以下这行代码
printf("Num=%d\r\n",666)
*/
void Serial_Printf(char *format, ...)
{
	char String[100];
	va_list arg;
	va_start(arg,format);
	vsprintf(String,format,arg);
	va_end(arg);
	Serial_SendString(String);
}

注意:
①发送和接受均不需要手动清除发送或接收标志位,因为当发送字节或者读取字节内容时,硬件会自动清0
②Serial_Printf(“串口输出也支持中文输出”);
当编码格式为 UTF-8时才需要配置参数 --no-multibyte-chars
当编码格式为GB2312时则不需要配置参数文章来源地址https://www.toymoban.com/news/detail-819198.html

到了这里,关于STM32标准库开发——串口发送/单字节接收的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32串口通信—串口的接收和发送详解

    目录 前言: STM32串口通信基础知识: 1,STM32里的串口通信 2,串口的发送和接收 串口发送: 串口接收: 串口在STM32中的配置: 1. RCC开启USART、串口TX/RX所对应的GPIO口 2. 初始化GPIO口 3. 串口初始化 4. 串口使能 5. 串口发送数据 串口接收的两种实现方式: 1,轮询方式: 2,中断

    2024年04月08日
    浏览(91)
  • STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

    通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。比如STM32芯片里面集成了很多功能模块,如定时器计数、PWM输出、AD采集等等,这些都是芯片内部的电路,它们的配置寄存器、数据寄存器都在芯片里面,操作简单,直接读写就行。但是有些功能STM32内部没有

    2024年02月04日
    浏览(41)
  • STM32--HAl库串口接收与发送

            在此之前,我们已经学习了单片机串口通信的原理(江科协),再写一遍我个人认知:世界上任何两个事物如果要进行交流的话,那必然需要两个东西进行通信的,就像两个人之间,两个国人之间用普通话就能够清楚的交流,但是让我们中国人和外国人去交流可能会

    2024年04月10日
    浏览(40)
  • 【STM32】HAL库 串口中断发送与接收

    【STM32】HAL库 新建MDK工程 【STM32】HAL库 串口轮询发送 使用stm32串口中断发送和中断接收 在主函数前开启中断,接受字节数为5 接受5个字节后,进入中断接收完成回调函数,重新再开启中断,并把接收到的数据返回 修改接收数组长度,改为开启串口空闲中断 接收事件回调函数

    2024年02月08日
    浏览(48)
  • STM32实现三个串口同时开启发送接收数据

            实现STM32开通三个串口,每个串口都可以实现接收和发送数据。          编程时,严禁在中断函数中写入发送串口数据代码,否则会出错,具体原因不清楚(有大佬知道的话帮我指出),可能原因是DR寄存器冲突导致。         RX,TX连接到A9,A10使用串口1,使

    2024年04月13日
    浏览(52)
  • 最详细STM32,cubeMX串口发送,接收数据

    这篇文章将详细介绍 串口 发送数据,接受数据。 实验开发板:STM32F103C8T6。 所需软件:keil5 , cubeMX 。 实验目的:了解 串口的基础知识,掌握串口如何发送,接收数据 。 实验:串口发送数据点亮 led。 如果想了解串口的基础知识可以参考我之前的文章: STM32Cube串口USART发送

    2024年02月04日
    浏览(49)
  • 18、江科大stm32视频学习笔记——USART串口发送&串口发送和接收

    目录 一、USART串口发送  1、电路图 2、printf函数的移植方法 3、serial.c 4、main.c 5、解决直接写汉字,编译器报错 二 、USART串口发送和接收 1、查询实现 2、中断实现  (1)在Serial.c中添加的代码 (2)主函数中调用 (3)思路 (4)完整的Serial.c代码 (5)mian.c  要交叉连接,所

    2023年04月08日
    浏览(46)
  • 【STM32】HAL库 STM32CubeMX——DMA (串口DMA发送接收)

    软件: STM32CubeMX KEIL5 mcuisp 串口通信助手 硬件: STM32F103C8Tx 杜邦线,面包板,USB转TTL DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 我们知道系统的运

    2024年02月12日
    浏览(52)
  • stm32串口发送字符、字符串(标准库)

    目录 一 芯片概述  二 代码编写 2.1 以串口2为例配置初始化代码 2.2 发送自定义长度的字符串 2.3 发送单个字符 2.4 自定义printf函数 三 完整代码 3.1 usart2.c 3.2 usart2.h 3.3 while(1) 本文以stm32f103c8t6系列芯片为例,使用自定义函数发送串口数据。 PA2为TX引脚,PA3为RX引脚 第一个变量

    2024年04月15日
    浏览(34)
  • STM32 LL库 串口DMA发送接收配置教程

    本文详细介绍了如何在STM32中使用LL库进行串口DMA发送和接收的配置,包括STM32CubeMX的配置、代码初始化、发送功能和接收功能。通过本教程,您将学会如何正确配置串口DMA,并实现高效的数据传输。

    2024年02月10日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包