单片机初始化时,需要注意将初始化中各项明确赋值,不能忽略,如以如下代码对gpio进行初始化,
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置成推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
初始化是失败的,复位操作也无法执行,查阅stm32f103的固件库手册,可见GPIO初始化函数的使用方法,

官方的GPIO初始化示例为

则以如下代码对gpio进行初始化,
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置成推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
该初始化是成功的,能够复位管脚电平,与之前的初始化差别仅是多了一行设置管脚输出速率的代码,
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
可见,进行管脚初始化时,对管脚的每个可操作状态进行赋值是非常有必要的,这样可以避免许多莫名其妙的错误。
一般不建议以GPIO_InitTypeDef定义全局变量,可能会因为少赋值而引起不必要的错误。
STM32管脚初始化:为何每个状态都要赋值
本文介绍了在初始化STM32单片机的GPIO管脚时,必须为所有可操作状态赋值的重要性。通过对比正确与错误的初始化代码示例,强调了忽略赋值可能导致初始化失败和复位操作无法执行的问题。建议遵循官方示例,避免使用未完全赋值的GPIO_InitTypeDef全局变量,以防止出现未知错误。
1525

被折叠的 条评论
为什么被折叠?



