当前位置: 首页 > news >正文

USART串口理论知识总结

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

USART串口理论知识总结

  • 1、通讯的串行和并行
  • 1.串口采用发送数据代码并用printf重代码


1、通讯的串行和并行

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
时钟特性:比如你发送一个波形,
在这里插入图片描述
在这里插入图片描述

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

#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;
}

http://www.lryc.cn/news/406425.html

相关文章:

  • 基于 HTML+ECharts 实现智慧景区数据可视化大屏(含源码)
  • vxe-table——实现切换页码时排序状态的回显问题(ant-design+elementUi中table排序不同时回显的bug)——js技能提升
  • SQL
  • maven archetype
  • 浏览器打开抽奖系统html
  • 微信小程序-使用Component方法代替Page方法构造页面
  • Spark SQL----DISTRIBUTE BY子句
  • HTML5-canvas1
  • 【NOI-题解】1009 - 数组逆序1162 - 数组元素的删除1211 - 数组元素的插入1161. 元素插入有序数组1159. 数组元素的移动
  • 新电脑如何设置 npm 源及查看源、安装 cnpm、pnpm 和 yarn 的详细教程
  • 完全移动huggingface模型仓库(不是简单mv)
  • 手机空号过滤批量查询的意义及方法
  • Dockerfile制作部署wordpress-6.6
  • 项目的纪要
  • ubuntu 更新源
  • XGBoost、RF随机森林算法MATLAB实现
  • WPF 解决: DataGrid 已定义列,但是还是会显示模型的所有属性的问题
  • 【ai】Easy-RAG : ImportError: cannot import name ‘BaseModel‘ from ‘pydantic‘
  • WebKit简介
  • 笔记 | Python环境下的GUI编程常用包
  • mysql 数据库空间统计sql
  • 【Linux】线程——线程池、线程池的实现、线程安全的线程池、单例模式的概念、饿汉和懒汉模式、互斥锁、条件变量、信号量、自旋锁、读写锁
  • stm32入门-----TIM定时器(PWM输出比较——下)
  • css实现线条中间高亮,左右两边模糊(linear-gradient的运用)
  • 【数据结构】建堆算法复杂度分析及TOP-K问题
  • Thinkphp5实现前后端通过接口通讯基本操作方法
  • Go 语言任务编排 WaitGroup
  • 星环科技推出知识库产品 AI PC时代数据交互方式变革
  • 10道JVM经典面试题
  • Redisson常用的数据结构及应用场景