1、GPIO内部结构
2、GPIO输入模式
(1)浮空输入模式
(2)输入上拉模式
(3)输入下拉模式
(4)模拟输入模式
3、GPIO输出模式
(1)开漏输出模式
(2)开漏复用输出模式
(3)推挽输出模式
(4)推挽复用输出模式
4、3.GPIO初始化步骤
具体寄存器需要参考STM32F1x手册
(1)确定GPIO的工作模式和工作速度
通过配置寄存器GPIOx_CRL和GPIOx_CRH
(2)具体要输出的内容
置位复位寄存器:BSRR和数据输出寄存器:ODR
5、总结
(1)推挽输出
a、可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由VSS决定。
b、推挽结构指两个三极管受两路互补的信号控制,总是在一个导通的时候另外一个截止,优点开关效率效率高,电流大,驱动能力强。
c、输出高电平时,电流输出到负载,叫灌电流,可以理解成推,输出低电平时,负载电流流向芯片,叫拉电流,即挽。
(2)开漏输出
a、只能输出低电平,不能输出高电平。如果要输出高电平,则需要外接上拉。
b、开漏输出具有“线与”功能,一个为低,全部为低,多用于I2C和SMBUS总线。
关键字:STM32 GPIO 内部结构
引用地址:
STM32中的GPIO结构
推荐阅读最新更新时间:2024-11-17 11:36
stm32串口HAL库的DMA发送问题
本文使用stm32f411ret的串口1的DMA方式发送数据,刚开始调试的时候发现串口只能发送一次数据,之后就把系统hang住了。通过网上搜资料和不断尝试,发现问题是中断回调函数没有写的原因。 使用HAL库的DMA,需要同时实现DMA中断回调函数和串口中断回调函数。 void DMA2_Stream7_IRQHandler(void) { HAL_DMA_IRQHandler(Uart1Handle.hdmatx); } void USART1_IRQHandler(void) { HAL_NVIC_ClearPendingIRQ(USART1_IRQn); HAL_UART_IRQHandler(&Uart1
[单片机]
stm32 adc计算
用STM32自带的ADC读取引脚电压值,读回来的数据怎么转换成单位为V的数值??? V(ADC) = Value(ADC) * V(ref)/4096 (stm32的ADC是12位的,所以ad字的最大值是4096) 其中V(ADC)为算出的电压值;Value(ADC)为采集的AD值;V(ref)为参考电压,一般为3.3V。 比如你STM32的参考电压为3.3v,采集的AD值为1024,那么转换为电压V(ADC) = 1024×3.3/4096 = 0.825V
[单片机]
STM32 读写保护功能及设置
功能:: 读保护设置后将不能读出flash 的内容;当解除读保护的时候stm32 会自动擦出 整篇flash; 设置: 读保护设置:在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序 运行先 开保护) 解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设; (1)设置读保护: if(FLASH_GetReadOutProtectionStatus() != SET) { //FLASH_Unlock();不解锁FALSH 也可设置读保护??? FLASH_ReadOutProtection(ENABLE); } (2)解除读保护 if(FLASH_GetReadOutProtectionStatus()
[单片机]
STM32看门狗WWDG和IWDG的区别是什么
STM32有2个看门狗:独立看门狗和窗口看门狗。 独立看门狗IWDG:独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。 窗口看门狗WWDG:系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去了作用了,主要用于监视软件错误。 简单的讲,看门狗就是检测系统故障的,如果因为系统故障而没有及时喂狗,则引发复位重启。 对于一般的独立看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是这样有一个隐患,有可能程序跑乱了又跑回正常的地方,或者跑乱的程序正好执行了刷新看门狗操作,这样的情况下一按的看门狗就检测不出来故障了;但是如果使用窗口看门狗,程序员可以根据程序正常执行
[单片机]
STM32开发板显示界面添加状态栏
需要完成的主要工作有: 1) 划分显示位置 2) 绘制状态栏背景 3) 绘制电池图标:一共7种图标baticos 4) 绘制时间:只显示时和分 5) 循环检测时间变化,并更改显示时间数值,同步判断电池电量,绘制相应图标 源文件:satusbar.c #include includes.h #include rtc.h const u8* baticos = { 0:/STATUSBAR/BAT/battery0.bmp , 0:/STATUSBAR/BAT/battery1.bmp , 0:/STATUSBAR/BAT/battery2.bmp , 0:/STATUSBAR/BAT/battery3.
[单片机]
STM32——EEPROM
一、I2C接口读写EEPROM(AT24C02) ——主模式,分别用作主发送器和主接收器。通过查询事件的方式来确保正常通信。 1、I2C接口初始化 与其他对GPIO 复用的外设一样,它先调用了用户函数I2C_GPIO_Confi g() 配置好 I 2 C 所用的 I/O端口,然后再调用用户函数 I2C_Mode_Confi gu() 设置 I 2 C 的工作模式,并使能相关外设的时钟。 void I2C_EE_Init(void) { I2C_GPIO_Config(); I2C_Mode_Config(); /* 根据头文件 i2c_ee. 14 h 中的定义来选择 EEPROM 要写入的地址 */
[单片机]
STM32 定时器1配置
//通用定时器中断初始化 //这里时钟选择为APB1的2倍,而APB1为36M //arr:自动重装值。 //psc:时钟预分频数 //这里使用的是定时器3! void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的
[单片机]
STM32非对称PWM模式实现动态移相(Asymmetric PWM mode的用法)
MCU:STM32F334C8T6 STM32有多种PWM模式,实现各种不同的强大功能,本文使用非对称PWM模式,实现可动态改变移相相位的全桥PWM驱动波形 首先什么是非对称PWM模式? Asymmetric mode allows two center-aligned PWM signals to be generated with a programmable phase shift. 那什么是center-aligned PWM?个人比较浅显的理解为计数器采用中心计数模式时的PWM,如下图所示(截自ST官方参考手册),所以这里和之前讲的PWM中最大的不同之一就是计数器模式的选择,一定是选择中心计数模式,可根据中断的需
[单片机]