本帖最后由 wanta.nie 于 2016-3-19 21:59 编辑
板子在客户那边工作了一段时间后发现STM32F407 的输入口出现了不工作的情况,共使用了16个IO口,发现8个出现故障,正常IO口测量电压都上拉到了3.3V , 故障的IO口测量电压只有 1.1V 左右,断开光耦引脚,替换电阻电容,故障不变,可以肯定是STM32F407 的IO输入出了问题,上拉不到 3.3V ,只有1.1V, 不知道什么原因怀疑是STM32F4 的IO脚坏掉了,可是将IO脚配置成输出后,控制高低电压又似乎是可以控制的,非常疑惑,不知道有朋友知道原因吗?
现在板子其他功能都是正常,晶振正常的,液晶按键都是正常工作的,程序也没跑飞,只有STM32F4 的几个输入引脚电压不正确,量的只有1.1V,所以板子输入信号总是错误的
板子以前以前都是正常工作的,现在几个IO输入脚忽然不工作
难道是STM32的IO脚烧坏了?
配置16个输入IO引脚的代码如下:
// 通用输入口
typedef struct
{
GPIO_TypeDef * port;
uint16_t pin;
}LIP_t;
static LIP_t LIP[] =
{
{GPIOE, GPIO_Pin_4}, // LI0 :PE4
{GPIOE, GPIO_Pin_5}, // LI1 :PE5
{GPIOE, GPIO_Pin_6}, // LI2 :PE6
{GPIOC, GPIO_Pin_13}, // LI3 :PC13
{GPIOC, GPIO_Pin_14}, // LI4 :PC14
{GPIOC, GPIO_Pin_15}, // LI5 :PC15
{GPIOC, GPIO_Pin_0}, // LI6 :PC0
{GPIOC, GPIO_Pin_1}, // LI7 :PC1
{GPIOC, GPIO_Pin_2}, // LI8 :PC2
{GPIOC, GPIO_Pin_3}, // LI9 :PC3(手轮 10X)
{GPIOA, GPIO_Pin_0}, // LI10:PA0(手轮 A)
{GPIOA, GPIO_Pin_1}, // LI11:PA1(手轮 B)
{GPIOA, GPIO_Pin_2}, // LI12:PA2(手轮 100X)
{GPIOA, GPIO_Pin_4}, // LI13:PA4(手轮 X轴)
{GPIOA, GPIO_Pin_5}, // LI14:PA5(手轮 Y轴)
{GPIOA, GPIO_Pin_6} // LI15:PA6(手轮 Z轴)
};
void lip_init(void)
{
// GPIO clock enable
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
for(int i=0; i < 16; i ++)
{
GPIO_InitStructure.GPIO_Pin = LIP.pin;
GPIO_Init(LIP.port, &GPIO_InitStructure);
}
}
4个输入IO引脚接口电路图如下:
https://bbs.21ic.com/forum.php?mod=attachment&aid=NjEwMzM2fGJhZjYzZTFhMjE4YWEzMWRiMmFlNTBmNjhjY2FmNjc3fDE3MzIzOTE1ODA%3D&request=yes&_f=.png
|