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

串口初始化IO引脚

目录

1.USART模块有哪些引脚

2.引脚分布图

3.重映射表

4.IO配置表

5.编写代码(默认PA9 PA10)

6.编写代码(重映射默认PB6 PB7)


学原理还挺枯燥的,这狗奥子不知道跑哪里耍去了

Tx是发射引脚

Rx是接收引脚

在使用串口之前,需要对这两个引脚初始化

1.USART模块有哪些引脚

下面三个目前不会使用到

2.引脚分布图

在数据手册28页,有太多引脚,而STM32F103C8T6 是LQFP48,所以只看那一行就行

主功能(复位后默认)表示如果单片机上电之后,不做任何配置,默认的引脚。

通用模式下,是通过CPU直接控制引脚

复用模式下,是将控制器交给了其他的片上外设

Tx是发射引脚

Rx是接收引脚

USARTTx和Rx引脚默认情况下是PA9 PA10,当PA9和PA10不能用的时候,这个芯片重映射给他准备了备用引脚PB6 PB7

3.重映射表

重映射表在参考手册120

USART1为例,USART1_REMAP=0不进行重映射,TX和RX就是PA9 PA10

                         USART1_REMAP=1进行重映射,TX和RX就是PA6 PA7

4.IO配置表

参考手册110面

        一般,TX选用全双工模式推挽复用输出,RX选用全双工模式上拉输入     

  

         USARTx_RX GPIO配置可以选择浮空输入或者带上拉输入,但是最好选用带上拉输入,因为RX引脚是负责接收数据的,如果这根线意外的断开了,RX引脚就悬空了,如果选用输入上拉模式,就可以给RX引脚提供一个默认的高电压,这样就避免外接的电磁波直接输入到这个引脚里面,对这个程序的运行造成影响

全双工:表示数据传输全部都是双向的

半双工:表示数据传输虽然是双向的,但是共用一条线不能同时进行

同步:在标准的串口基础上增加了一根CK线,CK线负责在两个设备之间传输时钟信号,时钟信号就可以把这两种社保同步起来

硬件流控:在标准的串口基础上增加了CTS和RTS两个引脚,也是交叉连接

5.编写代码(默认PA9 PA10)

一般,TX选用全双工模式推挽复用输出,RX选用全双工模式上拉输入   

#include "stm32f10x.h"                  // Device headerint main(void)
{//1.串口初始化//开启USART1时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//定义结构体USART_InitTypeDef USART_InitStruct;USART_InitStruct.USART_BaudRate=115200;USART_InitStruct.USART_Mode=USART_Mode_Tx | USART_Mode_Rx; //双向USART_InitStruct.USART_WordLength=USART_WordLength_8b;  //8数据位USART_InitStruct.USART_Parity=USART_Parity_No;  //无校验位USART_InitStruct.USART_StopBits=USART_StopBits_1;  //1位停止位USART_Init(USART1,&USART_InitStruct);//2.初始化IO引脚//初始化USART1引脚 TX发送 PA9 复用推挽输出RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;//复用推挽输出GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//最大速度GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化USART1引脚 RX接收 PA10 输入上拉RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//输入模式不用设置速度GPIO_Init(GPIOA,&GPIO_InitStruct);//3.USART模块的总开关USART_Cmd(USART1,ENABLE);while (1){}
}

6.编写代码(重映射默认PB6 PB7)

一般,TX选用全双工模式推挽复用输出,RX选用全双工模式上拉输入   

#include "stm32f10x.h"                  // Device headerint main(void)
{//1.串口初始化//开启USART1时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//定义结构体USART_InitTypeDef USART_InitStruct;USART_InitStruct.USART_BaudRate=115200;USART_InitStruct.USART_Mode=USART_Mode_Tx | USART_Mode_Rx; //双向USART_InitStruct.USART_WordLength=USART_WordLength_8b;  //8数据位USART_InitStruct.USART_Parity=USART_Parity_No;  //无校验位USART_InitStruct.USART_StopBits=USART_StopBits_1;  //1位停止位USART_Init(USART1,&USART_InitStruct);//2.初始化IO引脚//使用重映射 使能AFIO模块的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//GPIO_Remap_USART1=1GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;//复用推挽输出GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//最大速度GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化USART1引脚 RX接收 PA10 输入上拉RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//输入模式不用设置速度GPIO_Init(GPIOA,&GPIO_InitStruct);//3.USART模块的总开关USART_Cmd(USART1,ENABLE);while (1){}
}


文章转载自:

http://DKYCXkvO.pzbqm.cn
http://KpXwxGYa.pzbqm.cn
http://o5Nmrfqt.pzbqm.cn
http://GLDjsbv6.pzbqm.cn
http://qZalouLo.pzbqm.cn
http://8R3FB7uN.pzbqm.cn
http://APMDeZSV.pzbqm.cn
http://ABZE22ct.pzbqm.cn
http://QJzGS4hi.pzbqm.cn
http://qktZ3TiI.pzbqm.cn
http://L6yrGd8G.pzbqm.cn
http://1NqUsxv6.pzbqm.cn
http://GgbZ0oHN.pzbqm.cn
http://FYavOH0X.pzbqm.cn
http://PBORX8JM.pzbqm.cn
http://WWuHzzz8.pzbqm.cn
http://CswM9DkG.pzbqm.cn
http://IuDxYcXa.pzbqm.cn
http://aPCI6gXS.pzbqm.cn
http://hx0voPEj.pzbqm.cn
http://hQUJsYel.pzbqm.cn
http://prw6T4uL.pzbqm.cn
http://RwE3taLJ.pzbqm.cn
http://G2DteZvn.pzbqm.cn
http://2gdxrWXP.pzbqm.cn
http://dNdnjHB1.pzbqm.cn
http://JnBrzL2u.pzbqm.cn
http://LGvXabKu.pzbqm.cn
http://EP51zQDS.pzbqm.cn
http://TqYUKL7s.pzbqm.cn
http://www.dtcms.com/a/370615.html

相关文章:

  • 【cs336学习笔记】[第11课]如何用好scaling law
  • Sentinel服务治理:服务降级、熔断与线程隔离
  • JAVA快速学习(二)
  • Hystrix与Sentinel-熔断限流
  • 【Android】ViewPager2结合Fragment实现多页面滑动切换
  • Spring Boot 3.x 的 @EnableAsync应用实例
  • Android Audio Patch
  • java社交小程序源码支持APP多端springboot部署与功能模块详解
  • 安装es和kibana
  • phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(vulhub CVE-2018-12613)
  • Rust 字符串与切片
  • 解析、创建Excel文件的开源库OpenXLSX介绍
  • 数据库中间件ShardingSphere v5.2.1
  • 大模型推理时的加速思路?
  • (数据结构)哈希碰撞:线性探测法 vs 拉链法
  • 如何进行神经网络的模型训练(视频代码中的知识点记录)
  • Linux--命名管道
  • 【继承和派生】
  • IDEA修改系统缓存路径,防止C盘爆满
  • scikit-learn零基础配置(含python、anaconda)
  • 《sklearn机器学习——模型的持久性》joblib 和 pickle 进行模型保存和加载
  • 深入浅出 JVM 类加载器:分类、双亲委派与打破机制
  • ViGAS、RAF、DiFF-RIR论文解读
  • 《Science》神经炎症综述思路套用:从机制到跨领域研究范式
  • macOS下arm编译缺少stdint.h等问题
  • JP4-7-MyLesson后台前端(二)
  • 机器学习高级-day01-曲线拟合
  • JAVA同城打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码
  • CentOS系统管理:useradd命令的全面解析
  • 小智AI编译