USART串口理论知识总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

USART串口理论知识总结


1、通讯的串行和并行





1.串口采用发送数据代码并用printf重代码

c 复制代码
#include <stdint.h>
#include <stdio.h>
#include "gd32f30x.h"

static void Usb2ComGpioInit(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);
	//配置TX引脚对于的管脚为复用推挽输出模式,输出模式有复用和一般模式的区别,而输出无这样的的区别。
	gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);//发送引脚
	//配置TX引脚对于的管脚为上拉输入或者浮空输入
	//why  串口默认输出高电平,读取数据是,空闲状态和数据起始位都为低电平。
	gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_10MHZ, GPIO_PIN_10);//接受引脚
}

static void Usb2ComUartInit(uint32_t baudRate)
{
	/* 使能UART时钟;*/
	rcu_periph_clock_enable(RCU_USART0);
	
	/* 复位UART;*/
	usart_deinit (USART0);
	
	/* 通过USART_CTL0寄存器的WL设置字长;*/ 
	/* 初始默认WL字长为8bit*/ 
	usart_word_length_set(USART0, USART_WL_8BIT);
	
	/* 通过USART_CTL0寄存器的PCEN设置校验位;*/
	/* 初始默认无校验位*/
	usart_parity_config(USART0, USART_PM_NONE);
	
	/* 在USART_CTL1寄存器中写STB[1:0]位来设置停止位的长度;*/ 
	/*初始默认停止位1bit  可选0.5 1 1.5 2*/ 
	usart_stop_bit_set(USART0, USART_STB_1BIT);
	
	/* 在USART_BAUD寄存器中设置波特率;*/ 
	usart_baudrate_set(USART0, baudRate);
	
	/* 在USART_CTL0寄存器中设置TEN位,使能发送功能;*/
	usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
	
	/* 在USART_CTL0寄存器中置位UEN位,使能UART;*/ 
	usart_enable(USART0);
}

void Usb2ComTest(void)
{
	for (uint8_t i = 0; i <= 250; i++)
	{
		usart_data_transmit(USART0, i);//发送数据
		while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));  
		//当TBE为0,等待,当TBE为0时,表示TXR数据寄存器有数据,需要继续等待
		//当TBE为1,跳出循环,表示TXR数据寄存器无数据,可以继续向位移寄存器下一个数据。
		总结:RENE和TBE标志位为1是都表示已经准备好的意思,可以开始接受和发送下一个数据。TC为1时表示数据发送完毕。
	}
//	while (RESET == usart_flag_get(g_uartHwInfo.uartNo, USART_FLAG_TC));
//	usart_transmit_config(g_uartHwInfo.uartNo, USART_TRANSMIT_DISABLE);
	//TC为1时,跳出循环,表示位移寄存器数据(无数据),即发送完毕。
	//TC为0时,等待,表示位移寄存器数据有数据,需要继续等待。
}

/**
***********************************************************
* @brief USB转串口硬件初始化
* @param
* @return 
***********************************************************
*/
void Usb2ComDrvInit(void)
{
	Usb2ComGpioInit();
	Usb2ComUartInit(115200);
}

/**
***********************************************************
* @brief printf函数默认打印输出到显示器,如果要输出到串口,
		 必须重新实现fputc函数,将输出指向串口,称为重定向
* @param
* @return 
***********************************************************
*/
int fputc(int ch, FILE *f)
{
	usart_data_transmit(USART0, (uint8_t)ch);
	while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));
	return ch;
}

相关推荐
最后一个bug1 小时前
STM32MP1linux根文件系统目录作用
linux·c语言·arm开发·单片机·嵌入式硬件
wenchm1 小时前
细说STM32F407单片机IIC总线基础知识
stm32·单片机·嵌入式硬件
嵌入式lover2 小时前
STM32项目之环境空气质量检测系统软件设计
stm32·单片机·嵌入式硬件
kenwblack3 小时前
STM32 SPI读取SD卡
stm32·单片机
兰_博3 小时前
51单片机驱动1602液晶显示
单片机·嵌入式硬件·51单片机
深圳市青牛科技实业有限公司 小芋圆3 小时前
开关电源特点、分类、工作方式
前端·科技·单片机·物联网·分类·数据挖掘·新能源
我qq不是451516524 小时前
单片机优先级
单片机·嵌入式硬件
相醉为友5 小时前
在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题
单片机·嵌入式硬件·51单片机
1101 11016 小时前
STM32-笔记10-手写延时函数(SysTick)
笔记·stm32·单片机
极客小张6 小时前
基于STM32的智慧农业控制系统设计:python可视化、UART、I2C、TCP/HTTP技术
python·stm32·单片机·物联网·tcp/ip·毕业设计·课程设计