嵌入式02 STM32 实验01 端口复用和重映射
内设与外设:
端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设?
内设:单片机内部集成的功能一般包括:串口模块、SPI模块(Serial Peripheral Interface 串行外设接口)、I2C模块(Philips公司开发的一种简单、双向二线制同步串行总线)、A/D模块(模数转换器)、PWM模块(Pulse Width Modulation 脉冲宽度调制)、CAN模块(Controller Area Network 控制器局域网络)、EEPROM(Electrically Erasable Programmable read only memory 带电可擦可编程只写存储器)、比较器模块等等,都是集成在单片机芯片的内部,有相应的寄存器控制,可以通过指令直接控制
外设:单片机外部的外围功能模块,比如键盘控制芯片,液晶(OLED、LCD)、无线模块等等,外设可通过单片机的I/O、SPI、I2C等总线控制
端口复用:
STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个内置外设使用的时候,此时是不可以作为外部外设使用的,此时这个端口就叫做被复用了。
比如一个端口可以作为输入输出(使能端口时钟),同时它也可以作为串口使用(使能串口时钟),此时就说明这个端口被复用了
端口复用是重点,只要使用stm32就要用到外设,外设是与gpio引脚共用(复用)的,即某些引脚既可以单纯作为输入输出,又可以作为具有一定功能的内设(如ADC, 串口等等)的引脚端口。
实现方法:
1、使能端口时钟
2、使能复用功能的时钟
3、按照数据手册配置端口模式
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //①IO时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //②外设时钟使能 //③初始化IO为对应的模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10 PA.10 浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
端口重映射:
为了使不同器件封装的外设IO功能数量达到最优,可以把一些复用功能重新映射到其它的一些引脚上,也就是该端口很忙,你找它的徒弟,它也可以完成师傅干的事。
STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能。我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好的安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。
打个比方说,串口1的TX,RX引脚是在PA9,和PA10端口,但是同时它有两个映射端口PB6,PB7。开启重映射,PB6和PB7同样可以使用串口1。
也就是说把管脚的外设功能映射到另一个管脚,但不是可以随便映射的,具体看每个芯片的参考手册
实现方法:
1、使能重映射后的IO口
2、使能功能外设的时钟
3、使能AFIO时钟
4、依据数据手册设置GPIO口数据
5、开启重映射
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//①IO时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//②外设时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);③复用时钟使能 //④初始化IO为对应的模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9//复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 PA.10 浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//开启重映射
嵌入式02 STM32 实验01 端口复用和重映射的更多相关文章
- 嵌入式02 STM32 实验02 端口输入输出各4种模式
GPIO(General-purpose input/output 通用目的输入/输出端口) 电压(A模拟量)与电平(D数字量) GPIO 8种工作模式(输入四种.输出四种) 1.GPIO_Mode_ ...
- 嵌入式02 STM32 实验04跑马灯
开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...
- 嵌入式02 STM32 实验08 外部中断
一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家 ...
- 嵌入式02 STM32 实验07 串口通信
STM32串口通信(F1系列包含3个USART和2个UART) 一.单片机与PC机串行通信研究目的和意义: 单片机自诞生以来以其性能稳定,价格低廉.功能强大.在智能仪器.工业装备以及日用电子消费产品中 ...
- 嵌入式02 STM32 实验06 按键
按键实验和前面的跑马灯.蜂鸣器主要的区别就是这个是读取外部的输入信号,之前的实验都是对外部输出信号. 一.硬件设计 本实验的硬件为三个按键.两个lED(LED0.LED1).一个蜂鸣器(BEEP). ...
- 嵌入式02 STM32 实验05 蜂鸣器
蜂鸣器:是一种一体化结构的电子讯响器.主要分为分压式蜂鸣器和电磁式蜂鸣器两种类型. 一.有源/无源蜂鸣器(不是指是否带电源,而是有没有自带震荡电路) 1.有源蜂鸣器:有源蜂鸣器自带震荡电路,一通电就会 ...
- 嵌入式02 STM32 实验11 NVIC和中断总结
一.基础知识 1.cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 2.STM32只有84个中断,包括16个内核中断和68个可屏蔽中断 3.STM32F103上只有60个 ...
- 嵌入式02 STM32 实验10 定时器中断
优秀文章 https://blog.csdn.net/qq_38351824/article/details/82619734 一.STM32通用定时器(TIM2.TIM3.TIM4和TIM5共四个通 ...
- 嵌入式02 STM32 实验03 时钟系统
时钟系统是处理器的核心,所以认真学习时钟系统是必要的,有助于深入理解STM32. 由于STM32的外设很多,有的外设不需要太高的时钟频率,同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也越弱,所以对 ...
随机推荐
- 使用readthedocs 发布 sphinx doc文档
readthedocs 是由社区驱动的开源sphinx doc 托管服务,我们可以用来方便的构建以及发布文档 这是一个简单的demo 项目,使用了用的比较多的sphinx_rtd_theme 主题,主 ...
- 「ZJOI2016」小星星
传送门 Description Solution 容斥,考虑有多少个节点不被匹配到,求出的方案,多个点可以同时不被匹配到 状态压缩+树形dp Code #include<bits/stdc++ ...
- React中父子组件传值
一.首先我们先来看父组件向子组件传值 1.1 我们要明白父组件 --> 子组件 是通过props这个属性来传值的 我们来看父组件的代码 import React from 'react'; im ...
- 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践
一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...
- 可伸缩性架构常用技术——之数据切分 Data Sharding/Partition
1. 简介 本来想写一篇可伸缩性架构方面的文章,发现东西太多了,久久未能下笔,这里首先把大家最关注的数据切分(Partition/Sharding)方面的内容先写完,给大家参考. 我们知道,为了应对不 ...
- uniapp - picker
[普通json数组] 针对官方的普通json数组示例,做些填充 <template> <view> <view class="uni-title uni-com ...
- m4a 转MP3
import os for filename in os.listdir(r'.'): print filename os.rename(filename,filename.replace(' ',' ...
- Weblogic部署web项目获取项目根目录为null
写在前面 图片上传功能, web项目部署在本地Tomcat上并没有问题, 但是打成war包部署到Linux服务器Weblogic下却出现如题问题, 导致图片上传失败. 问题代码 String real ...
- k8s 连接harbor 的私有仓库的两种方法 一种是secret 绑定到sa serviceaccount 账号下 一种是需要绑定到 imagePullSecrets: - name: boanbrowser
.创建secret 使用命令行: kubectl create secret docker-registry harbortest --namespace=default\ --docker-serv ...
- 初探Android逆向:通过游戏APP破解引发的安全思考
如今移动互联网已经完全融入到我们的生活中,各类APP也是层出不穷,因此对于安卓APP安全的研究也尤为重要.本文通过对一款安卓APP的破解实例,来引出对于APP安全的探讨.(本人纯小白,初次接触安卓逆向 ...