生活服务网站建设,牛天下网站建设,企业信息港网站建没,手机网站建设哪家强在使用CubeMX配置GPIO口时的时候#xff0c;对于某一个引脚只能选择用来输出或者输入。而有时我们需要在STM32上使用一些外设#xff0c;比如DHT11温湿度传感器#xff0c;其中的DATA口需要既能接收信号又能发送信号#xff0c;所以我们可以参照CubeMX自动生成的GPIO初始化… 在使用CubeMX配置GPIO口时的时候对于某一个引脚只能选择用来输出或者输入。而有时我们需要在STM32上使用一些外设比如DHT11温湿度传感器其中的DATA口需要既能接收信号又能发送信号所以我们可以参照CubeMX自动生成的GPIO初始化来进行配置。
//下面是自动生成的GPIO初始化函数GPIOB的6引脚用来输出
void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);/*Configure GPIO pin : PB6 */GPIO_InitStruct.Pin GPIO_PIN_6;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);} 下面就是照葫芦画瓢。
//形参mode用来写入该引脚是用来输出还是输入的
void DHT_GPIO_Init(uint32_t mode)
{GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin : PB8 */GPIO_InitStruct.Pin GPIO_PIN_7;GPIO_InitStruct.Mode mode;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);
}
有了这个初始化函数我们就可以在主函数或者其他函数中使用它了
DHT_GPIO_Init(GPIO_MODE_OUTPUT_PP);//输出引脚
DHT_GPIO_Init(GPIO_MODE_INPUT);//输入引脚
举个例子此时我需要对DHT11进行时序分析我们如何使用这里的PB7口来启动DHT11
void DHT11_Start()
{DHT_GPIO_Init(GPIO_MODE_OUTPUT_PP);/此时用作输出引脚DHT_HIGH;DHT_LOW;HAL_Delay(30);DHT_HIGH;DHT_GPIO_Init(GPIO_MODE_INPUT);/此时用作输入引脚while(DHT_VALUE);while(!DHT_VALUE);while(DHT_VALUE);
}