打印
[STM32H5]

STM32F103C8T6的GPIOA的15脚无法控制高低电平

[复制链接]
2712|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
四小春|  楼主 | 2024-8-25 21:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
想利用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灯而已,没有别的模块了。
该怎么办呢?

使用特权

评论回复
7
四小春|  楼主 | 2024-8-27 11:57 | 只看该作者
解决了,因为STM32的P13 14 15和PB3 4脚因为端口复用的原因默认是上电高电平,需要关掉复用才能正常控制高低电平,加这两行代码:    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);//重映射需要先使能AFIO时钟
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//只关闭JTAG而保留SWD
感谢热心的铁铁!!

使用特权

评论回复
6
嘉立创加热片| | 2024-8-26 17:32 | 只看该作者
哇哦 不错 挺好的

使用特权

评论回复
5
xionghaoyun| | 2024-8-26 13:54 | 只看该作者
没看到明显的问题

使用特权

评论回复
地板
Dick Hou| | 2024-8-26 11:13 | 只看该作者
因为PA15默认为JTAG引脚,所以控制不了。

将调试口设为SWD,就可以控制了。

使用特权

评论回复
评论
四小春 2024-8-27 11:55 回复TA
对,就是这个原因,需要加两行代码把复用屏蔽掉。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);//重映射需要先使能AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//只关闭JTAG而保留SWD 
板凳
Chad1989| | 2024-8-26 10:59 | 只看该作者
都采用STM32了,而且是最简单的IO操作,为啥不直接用cubeMX生成呢?

使用特权

评论回复
沙发
ughbss| | 2024-8-26 09:55 | 只看该作者
我也知道原因,提示下,复用

使用特权

评论回复
楼主
小小沙沙粒| | 2024-8-26 09:23 | 只看该作者
我知道原因,但我不说,等待楼下给出答案

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝