[STM32F0] STM32F030 GPIO无法配置成高阻态

[复制链接]
3132|6
 楼主| 逐梦电子 发表于 2019-5-16 11:53 | 显示全部楼层 |阅读模式
项目中使用到8脚数码管,需要使用高阻态来消影。程序之前在STM32f1跟STM8L051上跑都没问题,在F030上就出现串码现象了单步发现是部分IO无法高阻导致
寄存器配置跟库函数配置我都用了

00.png


  1. void GPIO_MODE(uint32_t gpio_pin,u8 odr)
  2.         {                
  3.                 GPIO_InitTypeDef GPIO_InitStructure;
  4.                
  5.                GPIO_InitStructure.GPIO_Pin = gpio_pin;
  6.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  7.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  8.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
  10.                 GPIO_Init(GPIOA, &GPIO_InitStructure);
  11.                 if(odr)
  12.                         GPIO_SetBits(GPIOA,gpio_pin);   // = 1
  13.                 else
  14.                         GPIO_ResetBits(GPIOA,gpio_pin); // = 0
  15.                 /*
  16.                
  17.                 //设置输出模式
  18.                 GPIOA->MODER &= ~(3 << (pin * 2));
  19.                 GPIOA->MODER |=  (1 << (pin * 2));
  20.                 //设置推挽输出
  21.                 GPIOA->OTYPER &= ~(1 << pin);
  22.                 //设置输出速度2MHz
  23.                 GPIOA->OSPEEDR &= ~(3 << (pin * 2));
  24.                 //GPIO端口上拉/下拉寄存器
  25.                 GPIOA->PUPDR &= ~(3 << (pin * 2));
  26.                 */
  27.         }

  28.         void GPIO_Floating(uint32_t gpio_pin)
  29.         {/*
  30.                 //设置浮空输入模式
  31.                 GPIOA->MODER &= ~(3 << (pin * 2));
  32.                 //GPIO端口上拉/下拉寄存器
  33.                 GPIOA->PUPDR &= ~(3 << (pin * 2));
  34.                 */
  35.                 GPIO_InitTypeDef GPIO_InitStructure;
  36.                
  37.           GPIO_InitStructure.GPIO_Pin = gpio_pin;
  38.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  39.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
  40.                 GPIO_Init(GPIOA, &GPIO_InitStructure);
  41.         }
  42. 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);}}
  43. 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);}}
  44. 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);}}
  45. 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);}}
  46. 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);}}
  47. 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);}}
  48. 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);}}
  49. 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);}}


drer 发表于 2019-5-22 14:43 | 显示全部楼层
有没有可能这个引脚坏了呢 换一个试试看
晓伍 发表于 2019-6-13 12:13 | 显示全部楼层
为什么无法配置呢 每个都应该可以啊 是不是外部电路给拉下来了
观海 发表于 2019-6-13 12:44 | 显示全部楼层
硬件电路的问题吧
guanjiaer 发表于 2019-6-13 12:49 | 显示全部楼层
你的问题好奇怪啊
heimaojingzhang 发表于 2019-6-13 12:54 | 显示全部楼层
换一个引脚试试看
keaibukelian 发表于 2019-6-13 13:11 | 显示全部楼层
二者之间的寄存器是一样的吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

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