第5章通用和复用功能IO应用
第5章通用和复用功能IO应用
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOA
GPIO_Pin_0
清除指定的数据端口位P186
GPIOB ……
GPIO_Pin_1 ……
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
端口位配置表
速度
➢ 2M 、10M、50M为IO端口驱动电路的相应速度,并非输出信号的 速度
➢ 芯片内部在IO端口的输出部分设计了多个相应速度不同的驱动电 路,用过根据设计的需要选择驱动电路
➢ 输出信号的速度与程序有关 ➢ 高频的驱动电路噪声较高,选用低频驱动电路可以降低噪声 ➢ 输出较高的频率,选用较低频率的驱动模块,可能得到失真的输
#define GPIOE
((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF
((GPIO_TypeDef *) GPIOF_BASE)
#define GPIOG
((GPIO_TypeDef *) GPIOG_BASE)
如何使用GPIOA指向的结构体成员?
GPIO初始化结构体
如何使用GPIO数据结构?
#define PERIPH_BASE
((uint32_t)0x40000000) 定义在Stm32f10x.h中
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE #define GPIOB_BASE #define GPIOC_BASE #define GPIOD_BASE #define GPIOE_BASE #define GPIOF_BASE #define GPIOG_BASE
IO端口复用的几种方式
IO端口复用简介I/O多路复用(multiplexing):本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。
适用场景:高并发的服务器端。
应对并发,常见的思维是创建多线程,每个线程管理一个并发操作,但是弊端很明显,就是多线程需要上下文切换,这个切换的消耗太大,当连接的客户端很多的时候弊端就很突出了。
所示使用单线程的多路复用。
几种方式1.s electLinux提供的select相关函数接口如下:#include <sys/select.h>#include <sys/time.h>int select(int max_fd, fd_set *readset, fd_set *wri teset, fd_set *exceptset, struct timeval *timeout) FD_ZERO(int fd, fd_set* fds) /* 清空集合 */FD_SET(int fd, fd_set* fds) /* 将给定的描述符加入集合 */FD_ISSET(int fd, fd_set* fds) /* 将给定的描述符从文件中删除 */FD_CLR(int fd, fd_set* fds) /* 判断指定描述符是否在集合中 */接口解释:1:select函数的返回值就绪描述符的数目,超时时返回0,出错返回-1。
2:第一个参数max_fd指待测试的fd个数,它的值是待测试的最大文件描述符加1,文件描述符从0开始到max_fd-1都将被测试。
3:中间三个参数readset、writeset和exceptset指定要让内核测试读、写和异常条件的fd集合,如果不需要测试的可以设置为NULL。
代码演示:sockfd=socket(AF_INET,SOCK_STREAM,0);memset(&addr,0,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(2000);addr.sin_addr.s_addr=IN ADDR_ANY;bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)); listen(sockfd,5);fd_set rset;int max = 0;int fds[5];for(int i=0;i<5;i++){memset(&client,O,sizeof(client);addrlen=sizeof(client);fds[i]=accept(sockfd,(struct sockaddr*)&client,&addrlen);if(fds[i]>max)max=fds[i];}while(1){FD_ZERO(&rset);for(int i=0;i<5;i++){FD_SET(fds[i],&rset);}puts("round again");select(max+1,&rset,NULL,NULL,NULL);for(int i=0;i<5;i++){if(FD_ISSET(fds[i],&rset)){memset(buffer,0,MAXBUF);read(fds[i],buffer,MAXBUF);puts(buffer);}}}这是一段使用select的端口复用的简单代码。
第五章 IO端口、输入捕捉
• 图5-2: 共用的端口结构框图
• 5.3.1 I/O 与多个外设复用
• 对于有些dsPIC30F 器件,尤其是那些带有少量 I/O 引脚数较少的器件,其每个I/O 引脚可能要 复用多种外设功能。图5-2 所示为两个外设与同 一个I/O 引脚复用的示例。
• 和TRISx 寄存器以及该端口引脚将读作0
5.3 外设复用
• 当某个外设使能时,与其相关的引脚将被禁止作为通 用I/O 引脚使用。可以通过输入数据路径读该I/O 引脚, 但该I/O 端口位的输出驱动器将被禁止。
• 与另一个外设共用一个引脚的I/O 端口总是服从于该外 设。外设的输出缓冲器数据和控制信号提供给一对多 路开关。该多路开关选择是外设还是相关的端口拥有 输出数据的所有权以及I/O 引脚的控制信号。图11-2 显示了端口如何与其他外设共用,以及与外设连接的 相关I/O 引脚。
• 参照图5-2,外设多路开关的结构将决定外设输 入引脚是否可以通过使用PORT 寄存器用软件控 制。
• 当图中所示的概念化的外设在功能被使能时,会断开 I/O 引脚与端口数据的连接。一般而言,下列外设允许 通过PORT 寄存器手动控制它们的输入引脚:
• 外部中断引脚 • 定时器时钟输入引脚 • 输入捕捉引脚 • PWM 故障引脚 • 大多数串行通信外设在使能时,将完全控作0 • bit 13 ICSIDL:输入捕捉模块在空闲时停止控制位 • 1 = 输入捕捉模块在CPU 空闲模式将停止 • 0 = 输入捕捉模块在CPU 空闲模式将继续工作 • bit 12-8 未用:读作0 • bit 7 ICTMR:输入捕捉定时器选择位 • 1 = 捕捉事件时捕捉TMR2 的内容 • 0 = 捕捉事件时捕捉TMR3 的内容 • 注: 可供选择的定时器可能会和上述不同。 更多详细
嵌入式系统设计(基于ST32F4) 课件 5 GPIO结构及应用
嵌入式系统设计
电子信息与计算机工程系 成都理工大学工程技术学院
5.3 GPIO典型应用步骤及常用库函数
5.3.2 GPIO常用函数
头文件:stm32f4xx_gpio.h 源文件:stm32f4xx_gpio.c
1、1个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
5.3 GPIO典型应用步骤及常用库函数
嵌入式系统设计
电子信息与计算机工程系 成都理工大学工程技术学院
5.3 GPIO典型应用步骤及常用库函数
5.3.1 GPIO典型应用步骤
使用库函数实现片上外设的控制,一般需要以下几步:
1、使能相应片上外设的时钟(非常重要),设计到的文件有
头文件:stm32f4xx_rcc.h 源文件:stm32f4xx_rcc.c 使用的主要函数:
每个GPIO有16个引脚,每个引脚都可以单独配置。
嵌入式系统设计
电子信息与计算机工程系 成都理工大学工程技术学院
5.1 GPIO 结构原理
1. GPIO 功能描述
根据应用需求,可通过软件将通用I/O (GPIO) 端口对应的各个引脚位分 别配置为多种模式: ● 输入浮空-上电默认模式 ● 输入上拉 ● 输入下拉 ● 模拟功能 ● 具有上拉或下拉功能的开漏输出 ● 具有上拉或下拉功能的推挽输出 ● 具有上拉或下拉功能的复用功能推挽 ● 具有上拉或下拉功能的复用功能开漏
嵌入式系统设计
电子信息与计算机工程系 成都理工大学工程技术学院
5.2 GPIO相关寄存器
嵌入式系统设计
电子信息与计算机工程系 成都理工大学工程技术学院
go中io多路复用原理
go中io多路复用原理
在Go语言中,IO多路复用是一种高效的IO模型,用于处理多个IO请求。
其原理是单个进程/线程可以同时处理多个IO请求,而不需要为每个请求创建一个新的线程或进程。
实现IO多路复用的关键在于使用特定的系统调用,如select、poll或epoll。
这些系统调用允许用户监视多个文件描述符(File Descriptor),
以便在任何一个文件描述符就绪(读就绪或写就绪)时能够立即执行相应的读/写操作。
当用户将想要监视的文件描述符添加到select、poll或epoll函数中时,函数会阻塞并由内核监视这些文件描述符。
一旦有文件描述符就绪,或者超时,函数就会返回。
然后,该进程可以进行相应的读/写操作。
Select、Poll和Epoll的区别在于它们能够同时监视的文件描述符数量、性
能和可移植性。
Select是最早实现IO多路复用的系统调用,但它的限制在
于最多只能监视1024个文件描述符,而且需要维护一个较大的数据结构来存储文件描述符,并且该数据结构需要被拷贝到内核中,导致较大的内存拷贝开销。
为了提高IO多路复用的性能,不同的操作系统都实现了自己的IO多路复用函数,例如epoll、kqueue和evport等。
Go语言为了提高在不同操作系统上的IO操作性能,也使用了平台特定的函数实现了多个版本的网络轮询模块。
这些模块在不同平台上实现了相同的功能,构成了一个常见的树形结构。
编译器在编译Go语言程序时,会根据目标平台选择树中特定的分支进行编译。
通过使用IO多路复用模型,Go语言能够高效地处理大量的并发连接和IO 操作,从而提高了程序的性能和响应能力。
第五章 通用和复用功能IO口解析
➢ 在需要的情况下,I/O管脚的外设功能可以通过一 个特定的操作锁定,以避免意外的写入I/O寄存器 。
➢ 在APB2上的I/O脚提供高达18MHz的翻转速度。
一、引脚介绍:以STM32F103x为例
5.1 GPIO的工作原理
3、编写用户文件 配置gpio口的相关操作:初始化结构体 库函数
GPIO_InitTypeDef GPIO_InitStructure; typedef struct 库文件利用关键字typedef定义的新类型 { uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef;
寄存器操作 int main(void) {
GPIOB->CRL=0x3<<20; //配置PB5为推挽输出,50MHZ
while(1) { GPIOB->ODR=0x0; Delay(0xAFFFF); GPIOB->ODR=0x20; Delay(0xAFFFF); } }
举例说明,分析流水灯例程—了解库开发流程
二、IO口的基本结构
5.1 GPIO的工作原理
2、 GPIO的8种设置模式 ⑸开漏输出模式
二、IO口的基本结构
5.1 GPIO的工作原理
2、 GPIO的8种设置模式 ⑸开漏输出模式
当CPU在编号1端通过“位设置/清除寄存器”或“输出数据寄存器”写 入数据后,该数据位将通过编号2的输出控制电路传送到编号4的I/O端口。
二、IO口的基本结构
2、 GPIO的8种设置模式
io 多路复用技术
io 多路复用技术
IO多路复用技术是一种支持同时监听多个输入输出流的技术,它
可以实现在一个进程中同时处理多个网络连接或文件IO操作。
传统的
IO操作需要在每个连接或文件上单独维护一个线程或进程,而多路复
用技术可以仅使用一个线程或进程来同时处理多个连接/文件IO操作,大大提高了系统的性能和吞吐量。
在多路复用技术中,使用select、poll和epoll这三个系统调用
来实现,它们都可以同时监视多个输入输出流,并在有事件发生时通
知应用程序处理。
其中,select和poll是在各自的文件描述符集合上进行等待和扫描,而epoll则是维护一个事件列表,只通知发生事件
的文件描述符,效率更高。
IO多路复用技术可以应用于各种场景,比如网络服务器、文件监
控等,它可以实现高效的事件处理,减少系统资源的占用,提高系统
的性能和可扩展性。
单片机教程单片机IO的使用
IO口的位操作
位设置
通过将某一位设置为1或0,可以 控制该位对应的硬件设备的工作
状态。
位清除
将某一位清零,通常用于关闭某个 硬件设备。
位反转
将某一位取反,实现硬件设备的状 态切换。
IO口的配置寄存器
1 2
配置寄存器的功能
配置寄存器用于设置IO口的模式、输出类型、输 出速度等参数,以满足不同的硬件设备控制需求。
按键输入
01
```c
02
void main() {
03
unsigned char keyState = 0; // 按键初始状态为未 按下
按键输入
while (1) {
if
(GPIO_ReadInputDataBit(GPIOx,
GPIO_Pin_x) == 0) { // 检测按键是否被按下
if (keyState == 0) { // 如果之前未按下,则进 入处理函数
特性。
02
LED灯的连接方式
LED灯通常与单片机的一个GPIO(通用输入输出)端口连接,通过控
制该GPIO端口的电平高低来控制LED灯的亮灭。
03
LED灯的控制代码
在单片机程序中,可以通过设置GPIO端口的寄存器值来控制LED灯的
亮灭,例如在C语言中,可以使用以下代码实现LED灯的闪烁
LED灯控制
• delay(1000);
LED灯控制
} } ```
按键输入
按键输入的原理
按键输入通常通过单片机的中断或轮询方式实现,当按键被按下时,会触发一个电平变化 或中断事件。
按键输入的连接方式
按键通常与单片机的一个GPIO端口连接,当按键被按下时,该GPIO端口的电平会发生跳 变。
stm32f10x参考手册
STM32F10x参考手册第一版STM32F10x参考手册1文档中的约定 (1)1.1寄存器描述中使用的缩写列表 (1)2存储器和总线构架 (2)2.1系统构架 (2)2.2存储器组织 (3)2.3存储器映像 (4)2.3.1外设存储器映像 (5)2.3.2嵌入式SRAM (6)2.3.3位段 (6)2.3.4嵌入式闪存 (6)2.4启动配置 (8)3电源控制(PWR) (9)3.1电源 (9)3.1.1独立的A/D转换器供电和参考电压 (9)3.1.2电池备份 (9)3.1.3电压调节器 (10)3.2电源管理器 (10)3.2.1上电复位(POR)和掉电复位(PDR) (10)3.2.2可编程电压监测器(PVD) (10)3.3低功耗模式 (11)3.3.1降低系统时钟 (12)3.3.2外部时钟的控制 (12)3.3.3睡眠模式 (12)3.3.4停止模式 (13)3.3.5待机模式 (14)3.3.6低功耗模式下的自动唤醒(AWU) (15)3.4电源控制寄存器 (16)3.4.1电源控制寄存器(PWR_CR) (16)3.4.2电源控制/状态寄存器 (17)3.5PWR寄存器映像 (18)4复位和时钟控制 (19)4.1复位 (19)4.1.1系统复位 (19)4.1.2电源复位 (19)4.2时钟 (20)4.2.1HSE时钟 (22)4.2.2HSI时钟 (22)4.2.3PLL (23)4.2.4LSE时钟 (23)4.2.5LSI时钟 (23)4.2.6系统时钟(SYSCLK)选择 (24)4.2.7时钟安全系统(CSS) (24)4.2.8RTC时钟 (24)4.2.9看门狗时钟 (24)4.2.10时钟输出 (25)4.3RCC寄存器描述 (26)4.3.1时钟控制寄存器(RCC_CR) (26)4.3.2时钟配置寄存器(RCC_CFGR) (27)4.3.3时钟中断寄存器 (RCC_CIR) (29)4.3.4APB2外设复位寄存器 (RCC_APB2RSTR) (32)4.3.5APB1外设复位寄存器 (RCC_APB1RSTR) (33)4.3.6AHB外设时钟使能寄存器 (RCC_AHBENR) (35)4.3.7APB2外设时钟使能寄存器(RCC_APB2ENR) (36)4.3.8APB1外设时钟使能寄存器(RCC_APB1ENR) (37)4.3.9备份域控制寄存器 (RCC_BDCR) (39)4.3.10控制/状态寄存器 (RCC_CSR) (40)4.4RCC寄存器映像 (43)5通用和复用功能I/O(GPIO和AFIO) (44)5.1GPIO功能描述 (44)5.1.1通用I/O(GPIO) (45)5.1.2单独的位设置或位清除 (45)5.1.3外部中断/唤醒线 (46)5.1.4复用功能(AF) (46)5.1.5软件重新映射I/O复用功能 (46)5.1.6GPIO锁定机制 (46)5.1.7输入配置 (46)5.1.8输出配置 (47)5.1.9复用功能配置 (48)5.2GPIO寄存器描述 (50)5.2.1端口配置低寄存器(GPIOx_CRL) (x=A..E) (50)5.2.2端口配置高寄存器(GPIOx_CRH) (x=A..E) (51)5.2.3端口输入数据寄存器(GPIOx_IDR) (x=A..E) (52)5.2.4端口输出数据寄存器(GPIOx_ODR) (x=A..E) (52)5.2.5端口位设置/复位寄存器(GPIOx_BSRR) (x=A..E) (53)5.2.6端口位复位寄存器(GPIOx_BRR) (x=A..E) (53)5.2.7端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) (54)5.3复用功能I/O和调试配置(AFIO) (55)5.3.1把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1 (55)5.3.2BXCAN复用功能重映射 (55)5.3.3JTAG/SWD复用功能重映射 (55)5.3.4定时器复用功能重映射 (56)5.3.5USART复用功能重映射 (57)5.3.6I2C 1 复用功能重映射 (58)5.3.7SPI 1复用功能重映射 (58)5.4AFIO寄存器描述 (59)5.4.1复用重映射和调试I/O配置寄存器(AFIO_MAPR) (60)5.4.2外部中断配置寄存器1(AFIO_EXTICR1) (62)5.4.3外部中断配置寄存器2(AFIO_EXTICR2) (62)5.4.4外部中断配置寄存器3(AFIO_EXTICR3) (63)5.4.5外部中断配置寄存器4(AFIO_EXTICR4) (63)5.5GPIO 和AFIO寄存器地址映象 (64)5.5.1GPIO寄存器地址映象 (64)5.5.2AFIO寄存器地址映象 (65)6中断和事件 (66)6.1嵌套向量中断控制器(NVIC) (66)6.1.1系统嘀嗒(SysTick)校准值寄存器 (66)6.1.2中断和异常向量 (66)6.2外部中断/事件控制器(EXTI) (68)6.2.1主要特性 (68)6.2.2框图 (69)6.2.3唤醒事件管理 (69)6.2.4功能说明 (69)6.2.5外部中断/事件线路映像 (71)6.3EXTI 寄存器描述 (72)6.3.1外部中断/事件寄存器映像 (75)7DMA 控制器(DMA) (76)7.1简介 (76)7.2主要特性 (76)7.3功能描述 (77)7.3.1DMA处理 (77)7.3.2仲裁器 (77)7.3.3DMA 通道 (78)7.3.4错误管理 (79)7.3.5DMA请求映像 (79)7.4DMA寄存器 (82)7.4.1DMA中断状态寄存器(DMA_ISR) (82)7.4.2DMA中断标志清除寄存器(DMA_IFCR) (82)7.4.3DMA通道x配置寄存器(DMA_CCRx)(x = 1...7).. (83)7.4.4DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1...7) (85)7.4.5DMA通道x外设地址寄存器(DMA_CPARx)(x = 1...7).. (85)7.4.6DMA通道x存储器地址寄存器(DMA_CPARx)(x = 1...7).. (85)7.5DMA寄存器映像 (86)8实时时钟(RTC) (88)8.1简介 (88)8.2主要特性 (88)8.3功能描述 (88)8.3.1概述 (88)8.3.2复位过程 (90)8.3.3读RTC寄存器 (90)8.3.4配置RTC寄存器 (90)8.3.5RTC标志的设置 (90)8.4RTC寄存器描述 (91)8.4.1RTC控制寄存器高位(RTC_CRH) (91)8.4.2RTC控制寄存器低位(RTC_CRL) (92)8.4.3RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL) (93)8.4.4RTC预分频分频因子寄存器(RTC_DIVH / RTC_DIVL) (94)8.4.5RTC计数器寄存器 (RTC_CNTH / RTC_CNTL) (95)8.4.6RTC闹钟寄存器(RTC_ALRH/RTC_ALRL) (95)8.5RTC寄存器映像 (97)9备份寄存器(BKP) (98)9.1简介 (98)9.2特性 (98)9.3侵入检测 (98)9.4RTC校准 (98)9.5BKP寄存器描述 (99)9.5.1备份数据寄存器x(BKP_DRx) (x = 1 ... 10) (99)9.5.2RTC时钟校准寄存器(BKP_RTCCR) (99)9.5.3备份控制寄存器(BKP_CR) (99)9.5.4备份控制/状态寄存器(BKP_CSR) (100)9.6BKP寄存器映像 (101)10独立看门狗(IWDG) (103)10.1简介 (103)10.1.1硬件看门狗 (103)10.1.2寄存器访问保护 (103)10.1.3调试模式 (104)10.2IWDG寄存器描述 (104)10.2.1键寄存器(IWDG_KR) (104)10.2.2预分频寄存器(IWDG_PR) (105)10.2.3重装载寄存器(IWDG_RLR) (106)10.2.4状态寄存器(IWDG_SR) (106)10.3IWDG寄存器映像 (107)11窗口看门狗(WWDG) (108)11.1简介 (108)11.2主要特性 (108)11.3功能描述 (108)11.4如何编写看门狗超时程序 (109)11.5调试模式 (110)11.6寄存器描述 (111)11.6.1控制寄存器(WWDG_CR) (111)11.6.2配置寄存器(WWDG_CFR) (111)11.6.3状态寄存器(WWDG_SR) (112)11.7WWDG寄存器映像 (113)12高级控制定时器(TIM1) (114)12.1简介 (114)12.2主要特性 (114)12.3框图 (115)12.4功能描述 (116)12.4.1时基单元 (116)12.4.2计数器模式 (117)12.4.3重复向下计数器 (125)12.4.4时钟选择 (126)12.4.5捕获/比较通道 (129)12.4.6输入捕获模式 (131)12.4.7PWM输入模式 (132)12.4.8强置输出模式 (132)12.4.9输出比较模式 (133)12.4.10PWM 模式 (134)12.4.11互补输出和死区插入 (136)12.4.12使用刹车功能 (138)12.4.13在外部事件时清除OCxREF信号 (139)12.4.14六步PWM的产生 (140)12.4.15单脉冲模式 (141)12.4.16编码器接口模式 (143)12.4.17定时器输入异或功能 (144)12.4.18与霍尔元件的接口 (145)12.4.19定时器和外部触发的同步 (146)12.4.20定时器同步 (149)12.4.21调试模式 (149)12.5TIM1寄存器描述 (150)12.5.1控制寄存器1(TIM1_CR1) (150)12.5.2控制寄存器2(TIM1_CR2) (151)12.5.3从模式控制寄存器(TIM1_SMCR) (153)12.5.4DMA/中断使能寄存器(TIM1_DIER) (154)12.5.5状态寄存器(TIM1_SR) (156)12.5.6事件产生寄存器(TIM1_EGR) (157)12.5.7捕获/比较模式寄存器1(TIM1_CCMR1) (158)12.5.8捕获/比较模式寄存器2(TIM1_CCMR2) (161)12.5.10计数器(TIM1_CNT) (165)12.5.11预分频器(TIM1_PSC) (165)12.5.12自动重装载寄存器(TIM1_ARR) (165)12.5.13周期计数寄存器(TIM1_RCR) (166)12.5.14捕获/比较寄存器1(TIM1_CCR1) (166)12.5.15捕获/比较寄存器2(TIM1_CCR2) (167)12.5.16捕获/比较寄存器3(TIM1_CCR3) (167)12.5.17捕获/比较寄存器(TIM1_CCR4) (168)12.5.18刹车和死区寄存器(TIM1_BDTR) (168)12.5.19DMA控制寄存器(TIM1_DCR) (170)12.5.20连续模式的DMA地址(TIM1_DMAR) (170)12.6TIM1寄存器图 (171)13通用定时器(TIMx) (173)13.1概述 (173)13.2主要特性 (173)13.3框图 (174)13.4功能描述 (175)13.4.1时基单元 (175)13.4.2计数器模式 (176)13.4.3时钟选择 (183)13.4.4捕获/比较通道 (185)13.4.5输入捕获模式 (187)13.4.6PWM输入模式 (187)13.4.7强置输出模式 (188)13.4.8输出比较模式 (188)13.4.9PWM 模式 (189)13.4.10单脉冲模式 (191)13.4.11在外部事件时清除OCxREF信号 (193)13.4.12编码器接口模式 (193)13.4.13定时器输入异或功能 (195)13.4.14定时器和外部触发的同步 (195)13.4.15定时器同步 (198)13.4.16调试模式 (202)13.5TIMx寄存器描述 (203)13.5.2控制寄存器2(TIMx_CR2) (205)13.5.3从模式控制寄存器(TIMx_SMCR) (206)13.5.4DMA/中断使能寄存器(TIMx_DIER) (207)13.5.5状态寄存器(TIMx_SR) (209)13.5.6事件产生寄存器(TIMx_EGR) (211)13.5.7捕获/比较模式寄存器1(TIMx_CCMR1) (212)13.5.8捕获/比较模式寄存器2(TIMx_CCMR2) (215)13.5.9捕获/比较使能寄存器(TIMx_CCER) (216)13.5.10计数器(TIMx_CNT) (218)13.5.11预分频器(TIMx_PSC) (218)13.5.12自动重装载寄存器(TIMx_ARR) (218)13.5.13捕获/比较寄存器1(TIMx_CCR1) (219)13.5.14捕获/比较寄存器2(TIMx_CCR2) (220)13.5.15捕获/比较寄存器3(TIMx_CCR3) (220)13.5.16捕获/比较寄存器(TIMx_CCR4) (221)13.5.17DMA控制寄存器(TIMx_DCR) (221)13.5.18连续模式的DMA地址(TIMx_DMAR) (222)13.6TIMx寄存器图 (223)14控制器局域网(bxCAN) (225)14.1简介 (225)14.2主要特点 (225)14.3总体描述 (225)14.3.1CAN 2.0B内核 (226)14.3.2控制、状态和配置寄存器 (226)14.3.3发送邮箱 (226)14.3.4接收过滤器 (226)14.3.5接收FIFO (227)14.4工作模式 (228)14.4.1初始化模式 (228)14.4.2正常模式 (228)14.4.3睡眠模式(低功耗) (228)14.4.4测试模式 (229)14.4.5静默模式 (229)14.4.6环回模式 (229)14.4.7环回静默模式 (230)14.5功能描述 (230)14.5.1发送处理 (230)14.5.2时间触发通信模式 (232)14.5.3接收管理 (232)14.5.4标识符过滤 (234)14.5.5报文存储 (238)14.5.6出错管理 (239)14.5.7位时间特性 (239)14.6中断 (241)14.7寄存器访问保护 (243)14.8CAN 寄存器描述 (243)14.8.1控制和状态寄存器 (243)14.8.2邮箱寄存器 (255)14.8.3CAN过滤器寄存器 (260)14.9bxCAN寄存器列表 (264)15I2C接口 (267)15.1介绍 (267)15.2主要特点 (267)15.3概述 (268)15.4功能描述 (269)15.4.1I2C从模式 (269)15.4.2I2C主模式 (271)15.4.3错误条件 (274)15.4.4SDA/SCL线控制 (275)15.4.5SMBus (275)15.4.6DMA请求 (277)15.4.7包错误校验(PEC) (278)15.5中断请求 (279)15.6I2C寄存器描述 (281)15.6.1控制寄存器1(I2C_CR1) (281)15.6.2控制寄存器2(I2C_CR2) (283)15.6.3自身地址寄存器1 (I2C_OAR1) (284)15.6.4自身地址寄存器2(I2C_OAR2) (285)15.6.5数据寄存器(I2C_DR) (285)15.6.6状态寄存器1(I2C_SR1) (285)15.6.7状态寄存器2 (I2C_SR2) (288)15.6.8时钟控制寄存器(I2C_CCR) (289)15.6.9TRISE寄存器(I2C_TRISE) (290)15.7I2C寄存器地址映象 (291)16串行外设接口(SPI) (292)16.1简介 (292)16.2主要特征 (292)16.3功能描述 (292)16.3.1概述 (292)16.3.2SPI从模式 (295)16.3.3SPI主模式 (296)16.3.4单向通信 (297)16.3.5状态标志 (297)16.3.6CRC计算 (298)16.3.7利用DMA的SPI通信 (299)16.3.8错误标志 (299)16.3.9中断 (300)16.4SPI寄存器描述 (300)16.4.1SPI控制寄存器1(SPI_CR1) (300)16.4.2SPI控制寄存器2(SPI_CR2) (302)16.4.3SPI 状态寄存器(SPI_SR) (303)16.4.4SPI 数据寄存器(SPI_DR) (304)16.4.5SPI CRC多项式寄存器(SPI_CRCPR) (304)16.4.6SPI Rx CRC寄存器(SPI_RXCRCR) (305)16.4.7SPI Tx CRC寄存器(SPI_TXCRCR) (305)16.5SPI 寄存器地址映象 (306)17USART收发器(USART) (307)17.1介绍 (307)17.2概述 (308)17.2.1框图 (309)17.2.2USART 特征描述 (310)17.2.3发送器 (310)17.2.4接收器 (312)17.2.5分数波特率的产生 (315)17.2.617.2.6 多处理器通信 (316)17.2.7校验控制 (317)17.2.8LIN(局域互联网)模式 (318)17.2.9USART 同步模式 (320)17.2.10单线半双工通信 (322)17.2.11智能卡 (322)17.2.12IrDA SIR ENDEC 功能块 (324)17.2.13利用DMA连续通信 (325)17.2.14硬件流控制 (326)17.3中断请求 (327)17.4USART寄存器描述 (329)17.4.1状态寄存器(USART_SR) (329)17.4.2数据寄存器(USART_DR) (330)17.4.3波特比率寄存器(USART_BRR) (331)17.4.4控制寄存器1 (USART_CR1) (331)17.4.5控制寄存器2(USART_CR2) (333)17.4.6控制寄存器3(USART_CR3) (335)17.4.7保护时间和预分频寄存器(USART_GTPR) (336)17.5USART寄存器地址映象 (338)18USB全速设备接口(USB) (339)18.1导言 (339)18.2主要特征 (339)18.3方框图 (339)18.4功能描述 (340)18.4.1USB功能模块描述 (341)18.5编程中需要考虑的问题 (342)18.5.1通用USB设备编程 (342)18.5.2系统复位和上电复位 (342)18.5.3双缓冲端点 (346)18.5.4同步传输 (347)18.5.5挂起/恢复事件 (348)18.6USB寄存器描述 (350)18.6.1通用寄存器 (350)18.6.2端点寄存器 (355)18.6.3缓冲区描述表 (358)18.7USB寄存器映像 (361)19模拟/数字转换(ADC) (363)19.1介绍 (363)19.2主要特征 (363)19.3引脚描述 (365)19.4功能描述 (365)19.4.1ADC开关控制 (365)19.4.2ADC时钟 (365)19.4.3通道选择 (365)19.4.4单次转换模式 (366)19.4.5连续转换模式 (366)19.4.6时序图 (367)19.4.7模拟看门狗 (368)19.4.8扫描模式 (368)19.4.9注入通道管理 (369)19.4.10间断模式 (369)19.5校准 (370)19.6数据对齐 (371)19.7可编程的通道采样时间 (371)19.8外部触发转换 (371)19.9DMA请求 (372)19.10双ADC模式 (372)19.10.1同时注入模式 (374)19.10.2同时规则模式 (374)19.10.3快速交替模式 (375)19.10.4慢速交替模式 (375)19.10.5交替触发模式 (376)19.10.6独立模式 (377)19.10.7混合的规则/注入同步模式 (377)19.10.8混合的同步规则+交替触发模式 (377)19.10.9混合同步注入+交替模式 (378)19.11温度传感器 (378)19.12中断 (379)19.13ADC寄存器描述 (381)19.13.1ADC状态寄存器(ADC_SR) (381)19.13.2ADC控制寄存器1(ADC_CR1) (382)19.13.3ADC控制寄存器2(ADC_CR2) (384)19.13.4ADC采样时间寄存器1(ADC_SMPR1) (387)19.13.5ADC采样时间寄存器2(ADC_SMPR2) (387)19.13.6ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) (388)19.13.7ADC看门狗高阀值寄存器(ADC_HTR) (388)19.13.8ADC看门狗低阀值寄存器(ADC_LRT) (388)19.13.9ADC规则序列寄存器1(ADC_SQR1) (390)19.13.10ADC规则序列寄存器2(ADC_SQR2) (390)19.13.11ADC规则序列寄存器3(ADC_SQR3) (391)19.13.12ADC注入序列寄存器(ADC_JSQR) (391)19.13.13ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4) (392)19.13.14ADC规则数据寄存器(ADC_DR) (392)19.14ADC寄存器地址映像 (394)20调试支持(DBG) (396)20.1概况 (396)20.2ARM参考文献 (397)20.3SWJ调试端口(serial wire and JTAG) (397)20.3.1JTAG-DP和SW-DP切换的机制 (397)20.4引脚分布和调试端口脚 (398)20.4.1SWJ调试端口脚 (398)20.4.2灵活的SWJ-DP脚分配 (398)20.4.3JTAG脚上的内部上拉和下拉 (399)20.4.4利用串行接口并释放不用的调试脚作为普通I/O口 (400)20.5STM32F10x JTAG TAP 连接 (400)20.6ID 代码和锁定机制 (401)20.6.1MCU DEVICE ID编码 (401)20.6.2TMC TAP (401)20.6.3Cortex-M3 TAP (401)20.6.4Cortex-M3 JEDEC-106 ID代码 (401)20.7JTAG调试端口 (402)20.8SW调试端口 (403)20.8.1SW协议介绍 (403)20.8.2SW协议序列 (403)20.8.3SW-DP状态机(Reset, idle states, ID code) (404)20.8.4DP和AP读/写访问 (404)20.8.5SW-DP寄存器 (405)20.8.6SW-AP寄存器 (405)20.9对于JTAG-DP或SWDP都有效的AHB-AP (AHB 访问端口) (405)20.10内核调试 (406)20.11调试器主机在系统复位下的连接能力 (407)20.12FPB (Flash patch breakpoint) (407)20.13DWT(data watchpoint trigger) (407)20.14ITM (instrumentation trace macrocell) (408)20.14.1概述 (408)20.14.2时间戳包,同步和溢出包 (408)20.15MCU调试模块(MCUDBG) (409)20.15.1低功耗模式的调试支持 (409)20.15.2支持定时器和看门狗和bxCAN的调试 (409)20.15.3调试MCU配置寄存器 (410)20.16TPIU (trace port interface unit) (411)20.16.1导言 (411)20.16.2跟踪引脚分配 (412)20.16.3TPUI格式器 (414)20.16.4TPUI帧异步包 (414)20.16.5同步帧包的发送 (415)20.16.6同步模式 (415)20.16.7异步模式 (415)20.16.8TRACECLKIN在STM32F10x内部的连接 (415)20.16.9TPIU寄存器 (416)20.16.10配置的例子 (416)20.17DBG寄存器地址映象 (417)STM32F10x参考手册第一版文档中的约定1 文档中的约定1.1 寄存器描述中使用的缩写列表在对寄存器的描述中使用了下列缩写:read / write (rw) 软件能读写此位。
第4章_通用和复用IO功能
输入配置: 可配置成浮空/上拉/下拉输入模式
例:将GPIOA所有的引脚都设置为输入浮空模式
/* 选择配置的引脚 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; /* 选择引脚翻转的速度 */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; /* 选择输入是浮空模式*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* 初始化引脚 */ GPIO_Init(GPIOA, &GPIO_InitStructure);
2. 单独的位设置或位清除
• 当对GPIOx_ODR的个别位编程时,软件不需 要禁止中断:在单次APB2写操作里,可以 只更改一个或多个位。 • 这是通过对“置位/复位寄存器”(置位复 位寄存器是:GPIOx_BSRR,复位寄存器是: GPIOx_BRR)中想要更改的位写1 来实现的。 没被选择的位将不被更改。
复用功能配置: 输入可配置成浮空/上拉/下拉输入模式 输出可配置成推挽或开漏
复用功能的模拟输入配置: 输出缓冲器、施密特触发输入、弱上拉和下拉 电阻被禁止,读取输入数据寄存器时值0
5 软件重新映射I/O 复用功能
• 为了使不同器件封装的外设I/O功能的数量 达到最优,可以把一些复用功能重新映射 到其他一些脚上。这可以通过软件配置相 应的寄存器来完成。这时,复用功能就不 再映射到它们的原始引脚上了。
4、复用功能(AF) 使用默认复用功能前必须对端口位配置寄存器编 程。 • 对于复用输入功能,端口可以配置成输入模式 (浮空、上拉或下拉) • 对于复用输出功能,端口必须配置成复用功能输 出模式(推挽或开漏)。 • 对于双向复用功能,端口位必须配置复用功能输 出模式(推挽或开漏)。这时,输入驱动器被配 置成浮空输入模式。
io多路复用原理
io多路复用原理一、概述IO多路复用是计算机网络编程中的一种重要技术,其原理是多个网络I/O流通过一个轮询机制集中管理,使得程序能够同时监视多个网络流并且在任何一个网络流产生数据时能够对其进行读取和处理。
与传统的单进程单线程模型不同,IO多路复用通过底层的操作系统机制使得多个I/O流能够共享同一个线程,从而减少了CPU时间的浪费,提高了程序的运行效率。
在Unix/Linux操作系统中,IO多路复用常常使用select()、poll()以及epoll()等函数来实现。
本文将从IO多路复用的原理、实现方式以及应用场景等方面对这一技术进行介绍和剖析。
二、原理在传统的网络编程模型中,每个I/O流都会由一个线程来负责管理,当有多个网络流需要处理时,就需要创建多个线程来分别处理每个流,这样会导致系统中线程数量的快速增长,同时也会带来线程间的上下文切换等额外的开销,对于CPU以及系统资源的占用都是不小的。
而IO多路复用的作用在于将多个I/O流通过一个轮询机制放到一个线程中来管理,使得程序能够同时监视多个网络流并且在任何一个网络流产生数据时能够对其进行读取和处理。
这种方法具有如下优点:1.减少了线程的数量,从而降低了系统的开销。
2.通过轮询机制实现,避免了线程内部的阻塞和唤醒过程,提高了程序的运行效率。
下面以select()函数为例,对IO多路复用的实现原理进行详细解释。
1.select()函数select()函数属于IO多路复用的基础函数,可以同时监视多个网络I/O流,当其中任何一个网络流产生I/O操作请求时,就能够对剩余的I/O流进行循环扫描,并进行数据的读取和处理。
select()函数的基本声明方式为:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval*timeout);其中各个参数的含义如下:nfds:监视的最大文件描述符(即最大有效的文件描述符+1),也就是待监视的网络I/O流的数量。
io多路复用的原理和实现_彻底理解IO多路复用实现机制
io多路复⽤的原理和实现_彻底理解IO多路复⽤实现机制前⾔BIO 、NIO 、AIO 总结Unix⽹络编程中的五种IO模型为了加深对 I/O多路复⽤机制的理解,以及了解到多路复⽤也有局限性,本着打破砂锅问到底的精神,前⾯我们讲了BIO、NIO、AIO的基本概念以及⼀些常见问题,同时也回顾了Unix⽹络编程中的五种IO模型。
本篇重点学习理解IO多路复⽤的底层实现机制。
概念说明IO 多路复⽤有三种实现,在介绍select、poll、epoll之前,⾸先介绍⼀下Linux操作系统中基础的概念:⽤户空间和内核空间进程切换进程的阻塞⽂件描述符缓存 I/O⽤户空间 / 内核空间现在操作系统都是采⽤虚拟存储器,那么对32位操作系统⽽⾔,它的寻址空间(虚拟存储空间)为4G(2的32次⽅)。
操作系统的核⼼是内核,独⽴于普通的应⽤程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。
为了保证⽤户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,⼀部分为内核空间,⼀部分为⽤户空间。
针对linux操作系统⽽⾔,将最⾼的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使⽤,称为内核空间,⽽将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使⽤,称为⽤户空间。
进程切换为了控制进程的执⾏,内核必须有能⼒挂起正在CPU上运⾏的进程,并恢复以前挂起的某个进程的执⾏。
这种⾏为被称为进程切换。
因此可以说,任何进程都是在操作系统内核的⽀持下运⾏的,是与内核紧密相关的,并且进程切换是⾮常耗费资源的。
从⼀个进程的运⾏转到另⼀个进程上运⾏,这个过程中经过下⾯这些变化:1. 保存处理机上下⽂,包括程序计数器和其他寄存器。
2. 更新PCB信息。
3. 把进程的PCB移⼊相应的队列,如就绪、在某事件阻塞等队列。
4. 选择另⼀个进程执⾏,并更新其PCB。
第5章MCS51单片机基本IO功能及应用(2)
GND
独立连接式键盘例 独立连接式键盘例1:
KEY:
P1.0 P1.1
AT89C52
JB P1.0,KEY1 ;逐键判别 ;去抖动 ACALL DELAY20MS ;去抖动 JNB P1.0,FUNC1 KEY1: JB P1.1,EXIT ;去抖动 ACALL DELAY20MS ;去抖动 JNB P1.1,FUNC2 EXIT: RET ;无任何键按下由此返回 P1.0要求的 功能1 要求的“ FUNC1: …… ;做P1.0要求的“功能1” RET P1.1要求的 功能2 要求的“ FUNC2: …… ;做P1.1要求的“功能2” RET
0列 列 1列 列 2列 列 3列 列
P1.4 P1.5 P1.6 P1.7
例 某单片机控制系统,P1口接有8发光二极管,P3.0、P3.1、P3.2、P3.3接有 4个开关K1、K2、K3、K4,试画出接口电路,并编程使得当K1按下时8个发光二 极管全亮;当K2按下时8个发光二极管闪亮;当K3按下时8个发光二极管由左向 右点亮;当K4按下时8个发光二极管全灭。 +5V
2行 行
设:第3行/第1列结点有键按下 第 行 第 列结点有键按下 首先: “1111 0000” → P1 首先 然后读P1: P1← “1101 xxxx” 然后读 只留高4位 只留高 位: A = “1101 0000” 因为有键按下, 因为有键按下 A ≠11110000
3行 行
P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
+v
0行 行 1行 行 2行 行 3行 行
IO复用——精选推荐
IO复⽤IO复⽤简单介绍IO复⽤使得程序能同⼀时候监听多个⽂件描写叙述符。
这对提⾼程序的性能⾄关重要。
通常。
⽹络程序在下列情况下须要使⽤IO复⽤技术:client程序要同⼀时候处理多个socket。
client程序要同⼀时候处理⽤户输⼊和⽹络连接。
TCPserver同⼀时候处理监听socket和连接socket。
server要同⼀时候处理TCP请求和UDP请求。
须要指出的是。
IO复⽤尽管能同⼀时候监听多个⽂件描写叙述符,但它本⾝是堵塞的。
⽽且当多个⽂件描写叙述符同⼀时候就绪时,假设不採取额外的措施。
程序就仅仅能按顺序依次处理当中的每个⽂件描写叙述符,这使得server程序看起来像是串⾏⼯作的。
假设要实现并发,仅仅能使⽤多进程或多线程等编程⼿段。
Linux下实现IO复⽤的系统调⽤主要有select、poll和epoll。
select系统调⽤select系统调⽤的⽤途是:在⼀段指定时间内,监听⽤户感兴趣的⽂件描写叙述符上的可读、可写和异常事件。
select APIselect系统调⽤的原型例如以下:#include <sys/select.h>#include <sys/time.h>int select(int maxfd, fd_set *readfds, fd_set *writefds, fe_set *exceptfds, const struct timeval *timeout);1)maxfd參数指定被监听的⽂件描写叙述符的总数。
它通常被设置为select监听的全部描写叙述符中的最⼤值加1,由于⽂件描写叙述符是从0開始计数的。
2)readfds、writefds和exceptfds參数分别指向可读、可写和异常等事件相应的⽂件描写叙述符中集合。
应⽤程序调⽤select函数时。
通过这3个參数传⼊⾃⼰感兴趣的⽂件描写叙述符。
select调⽤返回时。
内核将改动它们来通知应⽤程序哪些⽂件描写叙述符已经就绪。
IO接口的作用功能定义标准版文档
中断矢量 0003H 000BH 0013H 001BH 0023H 002BH
中断优先级 最高优先级
最低优先级
IP
(0B8H)
—
—
PT2 PS PT1 PX1 PT0 PX0
PX0/PX1:INT0/1优先级控制位: =0 时属低优先级; =1 时属高优先级。
PT0/PT1/PT2:T0/1/2中断优先级控制位: =0 时属低优先级; =1 时属高优先级。
1、线选寻址:用一条或几条地址线对外寻址
P2.7
MCS-51单片机 P2.5 P0口
P2.6
D7-0 /CE Q7-0
/CE AD7-0 A10 A9 A8 RAM (2K)
Q7-0 /CE D7-0
P2.5 做 RAM 片选线
(0000H—07FFH)
P2.2,P2.1,P2.0与P0口共同寻址 2K字节存储单元
二、CPU识别中断申请的依据C:PU识别中断申请的依据:
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
地2 数址据线的在输地入址/总输线出中传的送序方名式决C定P具体U地址在每个机器周期的S5P2期间,会自动查
询各个中断申请标志位,若查到某标志位被置
位,将启动中断机制。
TCON:Timer控制寄存器,是管理定时器工作的 SFR(其中低4位管外部中断)
数据协议/格式不同 所需功率/电平不匹配 所需测控点数量不匹配
二、接口与端口
本课程中讲到的接口可以是→器件→电路板卡 →设备/装置→ ……
口地址 → 可寻址的寄存器/端口 地址由选用的地址线条数与地址线名决定
地址线条数n决定:寻址范围 = 2n MCS-51寻址范围 = 216 = 65536 = 64K字节 地址线在地址总线中的序名决定具体地址 一个端口可能有多个口地址; 一个口地址只能唯一地指向某个端口。
STM32_RM_CH_V10_1中文参考手册
●●●●●●●●●●
●●●●●●●●●●
●
●
●
●●●●●
●●●●●
●●●●●●●●●●
●●●●●●●●●●
●●●●●●●●●●
●●
●
●●●●●●●●●●
●●●●●●●●●●
提示:点击上表中的章节名字可以直接跳转到对应的章节。
参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
串 行 总 线
器 局 域 网
外 设 总 线
间 总 线 接 口
同 步 异 步 收
串 行 总 线
网
(RTC)
口
器
发
器
(BKP)
(ETH)
OTG(OTG_FS)
(I2C)
(SPI)
(bxCAN)
(USB)
(FSMC)
( WWDG)
(IWDG)
(TIMx(x=1…8))
(DAC)
(ADC)
(USART)
(GPIO)
请读者随时注意在st网站下载更新版本目录stm32f10xxx参考手册727时钟安全系统css83728rtc时钟83729看门狗时钟847210时钟输出8473rcc寄存器85731时钟控制寄存器rcccr85732时钟配置寄存器rcccfgr86733时钟中断寄存器rcccir88734apb2外设复位寄存器rccapb2rstr91735apb1外设复位寄存器rccapb1rstr92736ahb外设时钟使能寄存器rccahbenr94737apb2外设时钟使能寄存器rccapb2enr95738apb1外设时钟使能寄存器rccapb1enr97739备份域控制寄存器rccbdcr997310控制状态寄存器rcccsr1007311ahb外设时钟复位寄存器rccahbrstr1017312时钟配置寄存器2rcccfgr21017313rcc寄存器地址映像103通用和复用功能iogpio和afio10581gpio功能描述105811通用iogpio106812单独的位设置或位清除107813外部中断唤醒线107814复用功能af107815软件重新映射io复用功能107816gpio锁定机制107817输入配置107818输出配置108819复用功能配置1098110模拟输入配置1098111外设的gpio配置11082gpio寄存器描述113821端口配置低寄存器gpioxcrlxa
第五章通用和复用功能IO口
第五章通用和复用功能IO口1.引言通用和复用功能IO口是现代数字电路设计中的重要组成部分。
它们允许电路与外部设备进行通信和控制,实现数据的输入、输出和处理。
在本章中,我们将介绍通用和复用功能IO口的基本原理和应用。
通用功能IO口是一种通用的输入/输出接口,可以通过软件来配置不同的功能。
它可以被用作输入口,用来读取外部设备的状态;也可以被用作输出口,用来控制外部设备的运行。
通用功能IO口通常由一组引脚组成,每个引脚都可以配置为不同的功能。
通过编程的方式,我们可以根据需要来选择引脚的功能,并进行相应的输入和输出操作。
复用功能IO口是一种多功能的输入/输出接口,可以通过硬件设置来选择不同的功能。
它通常由一个多路器和多个外设模块组成。
多路器的作用是选择不同的外设模块进行连接,从而实现不同的输入和输出功能。
使用复用功能IO口,可以有效地减少芯片上的引脚数量,提高系统的可扩展性和灵活性。
4.通用功能IO口的应用通用功能IO口广泛应用于各种数字电路设计中。
它可以连接各种外设设备,如按钮、开关、传感器、LED灯等。
通过编程的方式,我们可以读取外设的状态,并根据需要来控制外设的运行。
通用功能IO口还可以连接到其他数字电路中,实现数据的输入、输出和处理。
例如,它可以与存储器、处理器、通信接口等进行连接,实现数据的存储、处理和传输。
5.复用功能IO口的应用复用功能IO口广泛应用于嵌入式系统和通信系统中。
它可以连接各种外设设备,如显示器、触摸屏、以太网接口、USB接口等。
通过硬件设置,我们可以选择不同的外设模块进行连接,并根据需要来实现不同的输入和输出功能。
复用功能IO口还可以连接到其他模块中,实现数据的传输和处理。
例如,它可以与显示模块、通信模块等进行连接,实现图形的显示、数据的传输等。
6.小结通用和复用功能IO口是现代数字电路设计中的重要组成部分。
它们允许电路与外部设备进行通信和控制,实现数据的输入、输出和处理。
通过软件和硬件的配置,我们可以选择引脚的功能,并进行相应的输入和输出操作。
嵌入式 STM32的GPIO系统
对A5 功能锁定: GPIOA->LCKR |= 1<<5; GPIOA->LCKR |= 1<<16; GPIOA->LCKR &= ~(1<<16); GPIOA->LCKR |= 1<<16; while(GPIOA->LCKR & 1<<16); while(!(GPIOA->LCKR & 1<<16));
uint32_t *PA12_Output; PA12_Output = (uint32_t *) (0x42000000 + (0x4001080c-0x40000000)*32 +12*4); (*PA12_Output) = 0; (*PA12_Output) = 1;
应用
为简化位带操作,也可以定义一些宏。 #define BitBand(Addr,BitNo)
寄存器32个位
Bit31 Bit30 Bit29
Bit2 Bit1 Bit0
32个对应地址
Address31 Address30 Address29
Address2 Address1 Address 0
位带区:支持位带操作的地址区 位带别名区:对别名地址的访问最终作用到位带区
的访问上
下图从另一个侧面演示比特的膨胀对应关系
应用
GPIOA->ODR &= ~(1<<12);//output 0 from PA12; GPIOA->ODR |= 1<<12; //output 1 from PA12;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口,bps 115.2k ---2 M 即可,节能、噪声小; I2C ,400K ,留一点容量,10M; SPI 18M或9M , 选用50M
GPIO端口输入数据寄存器(GPIOx_IDR) (x=A..E)
端口输出数据寄存器(GPIOx_ODR) (x=A..E)
输出缓冲器被禁止 施密特触发输入被激活 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 对输入数据寄存器的读访问可得到I/O状态
STM32的 I/O输出配置
输出配置有四种: ➢ 推挽输出(OUT_PP,PP:Push_Pull) ➢ 开漏输出(OUT_OD,OD:Open Drain) ➢ 推挽式复用功能(AF_PP,AF:Alternate-Fuction) ➢ 开漏复用功能(AF_OD)
I/O端口若复用功能使用时的配置
推挽式复用功能(AF_PP,AF:Alternate-Fuction) 输入时配置有三种:浮空输入、输入上拉、输入下拉 输出时配置:推挽式 输入/输出双向:输入出模式为浮空输入、输出模式为推挽式
➢ 开漏复用功能(AF_OD) 输入时配置有三种:浮空输入、输入上拉、输入下拉 输出时配置:开漏模式 输入/输出双向:输入出模式为浮空输入、输出模式为开漏模式
1、GPIO基本概念
STM32F10xxx的I/O端口可以分为两类工作方式: (1)用作General Purpose Input Output(通用输入/输出 端口)使用,即简称GPIO; (2)用作复用功能使用,如中断、ADC、定时器等使 用。
STM32的I/O口是需要软件配置模式、速度、时钟并 使能的。
端口位配置表
速度
➢ 2M 、10M、50M为IO端口驱动电路的相应速度,并非输出信号的 速度
➢ 芯片内部在IO端口的输出部分设计了多个相应速度不同的驱动电 路,用过根据设计的需要选择驱动电路
➢ 输出信号的速度与程序有关 ➢ 高频的驱动电路噪声较高,选用低频驱动电路可以降低噪声 ➢ 输出较高的频率,选用较低频率的驱动模块,可能得到失真的输
➢ 输出缓冲器被激活 :开漏模式,推挽模式 ➢ 施密特触发输入被激活 ➢ 弱上拉和下拉电阻被禁止 ➢ 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 ➢ 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态 ➢ 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。
I/O端口若做 GPIO使用时的配置
STM32 GPIO引脚
书P47~P53 表5.3 P50 :引脚的描述 表5.4 TIM2引脚配置 表5.5 复用功能映像
2.2 复用I/O工作模式
GPIO重映射
复用
➢ 复用,可以重影射 ➢ 引脚和输出寄存器断开,并和片上外设的输出信号连接 ➢ 设置为复用功能后,如果外设不被激活,输出不确定
端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)
端口位清除寄存器(GPIOx_BRR) (x=A..E)
端口配置锁定寄存器(GPIOx_LCKR) (x=A..E)
GPIO初始化结构体 ——相关配置寄存器
结构GPIO_InitTypeDef定义于文件“stm32f10x.h”中:
typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef;
输入配置有四种: 浮空输入(In_Floating) 输入上拉(IPU:In Push_Up) 输入下拉(IPD:In Push_Down) 模拟输入(AIN:Anolog In)
输出配置有两种: ➢ 推挽输出(OUT_PP,PP:Push_Pull) ➢ 开漏输出(OUT_OD,OD:Open Drain)
STM32 GPIO复用功能配置
复用配置有三种: 复用输出:端口配置为开漏模式,输出控制器与输出寄存器断 开,与片上外设的输出信号连接,送复用功能输出信号到I/O引脚。 复用输入:端口必须配置成输入模式(浮空、上拉或下拉), 且输入引脚必须由外部驱动,I/O引脚信号经施密特触发器到达复 用功能输入端,送至片上外设。 双向复用:端口配置复用功能输出模式为开漏模式,输入驱动 器被配置成浮空输入模式。
如何使用GPIO数据结构?
#define PERIPH_BASE
((uint32_t)0x40000000) 定义在Stm32f10x.h中
3、I/O端口做 GPIO使用时涉及 的寄存器
1. GPIO配置寄存器(GPIOx_CRL,GPIOx_CRH) 2. GPIO数据寄存器(GPIOx_IDR和GPIOx_ODR) 3. 复位寄存器(GPIOx_BRR) 4. 置位/复位寄存器(GPIOx_BSRR) 5. 锁定寄存器(GPIOx_LCKR)
2、STM32的I/O端口工作模式
2.1 STM32 I/O功能
主要功能:
输入浮空 输入上拉
输
输入下拉
入
模拟输入
开漏输出
推挽式输出
输
推挽式复用功能 开漏复用功能
出
STM32 的I/O端口框图
漏极
图5.1 STM32的GPIO原理图 书P44
STM32 的I/O 输入配置
输入配置有四种: 浮空输入(In_Floating) 输入上拉(IPU:In Push_Up) 输入下拉(IPD:In Push_Down) 模拟输入(AIN:Anolog In)
I/O端口做复用功能使用时涉及的寄存器(后CRL,GPIOx_CRH)
1. 每个I/O口需要4位设置,每组端口(如PA)有16个 I/O,因此,每组端口一共需要16*4位用于设置,也 就是2个32位的字
2. 每个I/O口需要4位设置包括:引脚输入输出工作模式、 速度