dw用表格做网站,深圳龙华区是哪个区,企业合同管理系统,wordpress jquery插件开发一、GPIO的八种模式
GPIO支持4种输入模式#xff08;浮空输入、上拉输入、下拉输入、模拟输入#xff09;和4种输出模式#xff08;开漏输出、开漏复用输出、推挽输出、推挽复用输出#xff09;。
GPIO_Mode_AIN模拟输入GPIO_Mode_IN_FLOATING浮空输入GPIO_Mode_IPD下拉输… 一、GPIO的八种模式
GPIO支持4种输入模式浮空输入、上拉输入、下拉输入、模拟输入和4种输出模式开漏输出、开漏复用输出、推挽输出、推挽复用输出。
GPIO_Mode_AIN模拟输入GPIO_Mode_IN_FLOATING浮空输入GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入GPIO_Mode_Out_OD开漏输出GPIO_Mode_Out_PP推挽输出GPIO_Mode_AF_OD复用开漏输出GPIO_Mode_AF_PP复用推挽输出 开漏输出mos管导通输出强低电平mos管截止此时mos管电阻无穷大如果无外部上拉电路输出为高阻态如果有外部上拉电路输出为弱高电平驱动能力较弱 推挽输出NMOS管导通PMOS管截止输出强低电平NMOS管截止PMOS管导通输出强高电平 二、端口复用功能 由数据手册可以得知每一个IO口都有很多功能比如PA4可以做SPI1的片选也可以做SPI3的片选这些都是IO端口的复用功能 使用硬件SPI时此时的引脚需要使用复用功能即配置为复用推挽输出
void SPI1_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_SPI1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;GPIO_InitStruct.Mode GPIO_MODE_AF_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate GPIO_AF5_SPI1;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);
}使用硬件iic时引脚配置为复用开漏输出
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct {0};if(i2cHandle-InstanceI2C2){__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin GPIO_PIN_10|GPIO_PIN_11;GPIO_InitStruct.Mode GPIO_MODE_AF_OD;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate GPIO_AF4_I2C2;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);__HAL_RCC_I2C2_CLK_ENABLE();}
} 使用软件iic时此时的SCL和SDA引脚完全由我们控制所以不使能复用功能直接配置为开漏输出然后SDA引脚读数据时配置为上拉输入模式写数据时配置为开漏输出即可
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct {0};if(i2cHandle-InstanceI2C2){__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin GPIO_PIN_10|GPIO_PIN_11;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_OD;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate GPIO_AF4_I2C2;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);__HAL_RCC_I2C2_CLK_ENABLE();}
}
注意SPI作为主机MISO配置为浮空输入或者复用推挽输出都可以原因在于MISO引脚的功能就是读取电平信号所以配置为输入模式没有问题当配置为复用推挽输出时我们会把MISO端口的使用权交给SPI,他会自己控制MISO的端口模式为输入模式 三、GPIO速度 #define GPIO_SPEED_FREQ_LOW 0x00000000U /*! IO works at 2 MHz, please refer to the product datasheet */ #define GPIO_SPEED_FREQ_MEDIUM 0x00000001U /*! range 12,5 MHz to 50 MHz, please refer to the product datasheet */ #define GPIO_SPEED_FREQ_HIGH 0x00000002U /*! range 25 MHz to 100 MHz, please refer to the product datasheet */ #define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U /*! range 50 MHz to 200 MHz, please refer to the product datasheet */ 配置高速输出频率高噪音大功耗高电磁干扰强 配置低速输出频率低噪音小功耗低电磁干扰弱提高系统EMI电磁干扰性能 我们知道GPIO速度有四种模式低速中速高速和超高速其中不同的速度对应不同的时钟频率。
低速USART115.2kbps、按键扫描。中速I2C400kbps。高速SPI18Mbps、PWM高频信号。超高速QSPI FLASH,FMC,以太网等高速。 注意事项 1、如果你使用9600波特率UART通信建议速度配置为低。所以如果你想使产品更加完美速度配置也是关键的一项。 2、比如SPI时钟配置时如果配置为30Mhz,那么GPIO引脚的速度最起码配置为高速模式不然信号可能会失真。 3、GPIO设为输入模式时输出驱动电路断开速度配置无意义。此时应关注上拉/下拉电阻配置。 4、使用Cubemx生成代码时SPI选用软件片选信号此时注意GPIO口速度默认为低速模式但是SPI一般配置高速模式此时防止数据乱码需要修改GPIO口速度 四、如何选择I/O模式
浮空输入_IN_FLOATING ——浮空输入可以做KEY识别RX1带上拉输入_IPU——IO内部上拉电阻输入带下拉输入_IPD—— IO内部下拉电阻输入模拟输入_AIN ——应用ADC模拟输入或者低功耗下省电开漏输出_OUT_OD ——IO输出0接GNDIO输出1悬空需要外接上拉电阻才能实现输出高电平。当输出为1时IO口的状态由上拉电阻拉高电平但由于是开漏输出模式这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化实现C51的IO双向功能推挽输出_OUT_PP ——IO输出0-接GND IO输出1 -接VCC读输入值是未知的复用功能的开漏输出_AF_OD ——片内外设功能I2C的SCL、SDA复用功能的推挽输出_AF_PP——片内外设功能USART的TX和RX、SPI的MOSI、MISO.SCK 五、JTAG引脚作为GPIO使用要注意
例如PA15引脚它默认时JTDI引脚但是可以复用为SPI的NSS片选信号。在初始化时需要先开启AFIO时钟再关闭JTAG功能否则GPIO功能仍然不起作用。初始化代码如下
stm32f103 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); /*使能SWD 禁用JTAG*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* CS: PA15 */GPIO_InitStructure.GPIO_Pin GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_Init(GPIOA, GPIO_InitStructure);兆易创新gd32F103
void micromotor_alarm_gpio_config(void)
{//1.GPIO引脚时钟使能rcu_periph_clock_enable(RCU_GPIOA); //2.复用功能时钟使能 rcu_periph_clock_enable(RCU_AF); //3.GPIO配置为推完输出模式gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_15); //4.重映射配置JTAG-DP禁用和SW-DP使能 gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE); //5.引脚配置为低电平gpio_bit_reset(GPIOA,GPIO_PIN_15);
}
常见的调试接口
SW调试接口 PA13、PA14共两个引脚。
JTAG调试接口 PA13、PA14、PA15、PB3、PB4共五个引脚。