[STM32F0] 无法配置成高阻态

[复制链接]
 楼主| liliang9554 发表于 2021-4-12 23:14 | 显示全部楼层 |阅读模式
STM32F030 GPIO无法配置成高阻态
jiajs 发表于 2021-4-12 23:16 | 显示全部楼层

楼主详细说说怎么回事啊,这么说太笼统了
 楼主| liliang9554 发表于 2021-4-12 23:19 | 显示全部楼层
项目中使用到8脚数码管,需要使用高阻态来消影。程序之前在STM32f1跟STM8L051上跑都没问题,在F030上就出现串码现象了单步发现是部分IO无法高阻导致
寄存器配置跟库函数配置我都用了
 楼主| liliang9554 发表于 2021-4-12 23:21 | 显示全部楼层
songqian17 发表于 2021-4-12 23:22 | 显示全部楼层

void GPIO_MODE(uint32_t gpio_pin,u8 odr)
        {                 
                GPIO_InitTypeDef GPIO_InitStructure;
               
               GPIO_InitStructure.GPIO_Pin = gpio_pin;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                if(odr)
                        GPIO_SetBits(GPIOA,gpio_pin);   // = 1
                else
                        GPIO_ResetBits(GPIOA,gpio_pin); // = 0
                /*
               
                //设置输出模式
                GPIOA->MODER &= ~(3 << (pin * 2));
                GPIOA->MODER |=  (1 << (pin * 2));
                //设置推挽输出
                GPIOA->OTYPER &= ~(1 << pin);
                //设置输出速度2MHz
                GPIOA->OSPEEDR &= ~(3 << (pin * 2));
                //GPIO端口上拉/下拉寄存器
                GPIOA->PUPDR &= ~(3 << (pin * 2));
                */
        }

        void GPIO_Floating(uint32_t gpio_pin)
        {/*
                //设置浮空输入模式
                GPIOA->MODER &= ~(3 << (pin * 2));
                //GPIO端口上拉/下拉寄存器
                GPIOA->PUPDR &= ~(3 << (pin * 2));
                */
                GPIO_InitTypeDef GPIO_InitStructure;
               
          GPIO_InitStructure.GPIO_Pin = gpio_pin;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
                GPIO_Init(GPIOA, &GPIO_InitStructure);
        }
void LED1_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_0,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_0,0); }  else {GPIO_Floating(GPIO_Pin_0);}}
void LED2_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_1,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_1,0); }  else {GPIO_Floating(GPIO_Pin_1);}}
void LED3_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_2,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_2,0); }  else {GPIO_Floating(GPIO_Pin_2);}}
void LED4_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_3,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_3,0); }  else {GPIO_Floating(GPIO_Pin_3);}}
void LED5_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_4,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_4,0); }  else {GPIO_Floating(GPIO_Pin_4);}}
void LED6_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_5,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_5,0); }  else {GPIO_Floating(GPIO_Pin_5);}}
void LED7_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_6,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_6,0); }  else {GPIO_Floating(GPIO_Pin_6);}}
void LED8_PIN(char num) {if(num == 1){GPIO_MODE(GPIO_Pin_7,1); }  else if(num == 0){GPIO_MODE(GPIO_Pin_7,0); }  else {GPIO_Floating(GPIO_Pin_7);}}
wangzsa 发表于 2021-4-12 23:24 | 显示全部楼层
有没有可能这个引脚坏了呢 换一个试试看
stly 发表于 2021-4-12 23:26 | 显示全部楼层
为什么无法配置呢 每个都应该可以啊 是不是外部电路给拉下来了
llljh 发表于 2021-4-12 23:28 | 显示全部楼层
硬件电路的问题吧
renyaq 发表于 2021-4-12 23:30 | 显示全部楼层
你的问题好奇怪啊
supernan 发表于 2021-4-12 23:32 | 显示全部楼层

换一个引脚试试看
shimx 发表于 2021-4-12 23:36 | 显示全部楼层
二者之间的寄存器是一样的吗
 楼主| liliang9554 发表于 2021-4-12 23:38 | 显示全部楼层

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先
zchong 发表于 2021-4-13 07:58 来自手机 | 显示全部楼层
会叫?
sonicll 发表于 2021-4-13 09:00 | 显示全部楼层
GPIO配置成开漏模式,输出寄存器写1,这才是高阻态
guanjiaer 发表于 2021-5-7 14:28 | 显示全部楼层
有这种模式的吗
heimaojingzhang 发表于 2021-5-7 15:20 | 显示全部楼层
为什么要使用高阻态呢
keaibukelian 发表于 2021-5-7 15:22 | 显示全部楼层
其他模式可以配置成功 吗
labasi 发表于 2021-5-7 15:24 | 显示全部楼层
你的问题很奇怪
paotangsan 发表于 2021-5-7 16:05 | 显示全部楼层
f0的没有这个模式的吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

950

主题

11568

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部

950

主题

11568

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部