电路如下
我们来硬件仿真一下这个PB4,进入main函数,这个口就高电平 了,解释一下,这个PB4的初始化在函数LED_Init(); //LED端口初始化
我们看到程序里开始就把这个PB4置低电平了,单步调试往下走,看看变低?
结果呢还是高电平
在往下调试
看到只有初始化这个PB4后,GPIO_ResetBits(GPIOB,GPIO_Pin_4);才变低了
和其他IO口上电后低电平正好冲突了
2.问题详细剖析
这个PB4恰好是单片机的jtag口,虽然刚上电已经置为普通口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); / 开复用时钟,才能把JTAG的IO口当作普通GPIO利用 /GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); / 禁用JTAG,保留SWD /
但是还是一贯高,该当是一个小bug
3.问题办理方案我们只管即便把PB4的初始化函数LED_Init(); //LED端口初始化放到最前面
电路上在三极管的基极对地并电阻和电容,延时一下导通,电路变动如下
或者把这个打开外设的开关改为低电平打开
总结和建议如果大家在设计电路时,碰到用这个PB4来高电平打开开关了,必须把稳这个上电高电平的隐患,只管即便避开这个引脚