21ic问答首页 - STM32F103C8T6的GPIOA的15脚无法控制高低电平
STM32F103C8T6的GPIOA的15脚无法控制高低电平
四小春2024-08-25
想利用STM32F103C8T6的GPIOA的11 12和15脚控制3个LED灯,但是发现无法控制GPIO15引脚的点平,但是11和12脚可以控制,初始化的时候试过了初始化所有引脚和仅初始化GPIOA的11 12和15脚,均无法控制15脚的高低电平,15脚一直是高电平。初始化代码如下:1、初始化所有GPIOA引脚
int main(void)
{
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //GPIO引脚,赋值为所有引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,赋值为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
GPIO_ResetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
GPIO_SetBits(GPIOA, GPIO_Pin_11);
GPIO_SetBits(GPIOA, GPIO_Pin_12);
GPIO_SetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
}
}
2、仅初始化GPIOA的引脚11 12和15脚
int main(void)
{
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOA的时钟
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //将PA11 PA12 PA15引脚初始化为推挽输出
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
GPIO_ResetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
GPIO_SetBits(GPIOA, GPIO_Pin_11);
GPIO_SetBits(GPIOA, GPIO_Pin_12);
GPIO_SetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
}
}
在单步调试的时候GPIO的IDR15引脚一直是高电平,是哪里出了问题呢?程序中只用到了GPIO的A引脚电量3个LED灯而已,没有别的模块了。
该怎么办呢?
int main(void)
{
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //GPIO引脚,赋值为所有引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,赋值为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
GPIO_ResetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
GPIO_SetBits(GPIOA, GPIO_Pin_11);
GPIO_SetBits(GPIOA, GPIO_Pin_12);
GPIO_SetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
}
}
2、仅初始化GPIOA的引脚11 12和15脚
int main(void)
{
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOA的时钟
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //将PA11 PA12 PA15引脚初始化为推挽输出
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
GPIO_ResetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
GPIO_SetBits(GPIOA, GPIO_Pin_11);
GPIO_SetBits(GPIOA, GPIO_Pin_12);
GPIO_SetBits(GPIOA, GPIO_Pin_15);
Delay_ms(500);
}
}
在单步调试的时候GPIO的IDR15引脚一直是高电平,是哪里出了问题呢?程序中只用到了GPIO的A引脚电量3个LED灯而已,没有别的模块了。
该怎么办呢?
赞0
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//只关闭JTAG而保留SWD
感谢热心的铁铁!!
评论
2024-08-27
赞0
评论
2024-08-26
赞0
评论
2024-08-26
赞0
将调试口设为SWD,就可以控制了。
评论
2024-08-26
对,就是这个原因,需要加两行代码把复用屏蔽掉。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);//重映射需要先使能AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//只关闭JTAG而保留SWD
赞0
评论
2024-08-26
赞0
评论
2024-08-26
赞0
评论
2024-08-26
您需要登录后才可以回复 登录 | 注册