问题描述: 在STM8L101F3P6的PD0这个口,其控制一个NMOS来控制某设备的供电情况,电路如图下: 1、初始化函数中设置PD0为推挽输出高电平: GPIO_Init(GPIOD,POWER_UP,GPIO_Mode_Out_PP_High_Fast); 但此后,在GPIO_SetBits(GPIOD,GPIO_Pin_0);的时候,会出现如下错误:
2、 设置为推挽输出低电平 GPIO_Init(GPIOD,POWER_UP,GPIO_Mode_Out_PP_Low_Fast); 时,问题依旧。
3、初始化GPIO时,不初始化该函数,不出现上述问题,但调试遇到GPIO_SetBits(GPIOD,GPIO_Pin_0)时也会出现上述的情况。很奇怪。
4、同样的电路在PA口无问题,PA2、PA3接上述电路可正常控制及正常调试。
5、更换PB0和PB6控制上述电路,问题依旧,并且调试几次后,ST-LINK无**常连接单片机,芯片损坏。
目前这个问题无法解决,只能用替代方案不使用相应的IO口来解决。接下来看一下用户手册。 -------------------------------------------------------------------------------------------------------------------------- 1、IO口原理结构图如下,上述问题估计和内部寄存器状态和IO输出级的MOS有关,但无法确认。
2.复位后的IO状态有如下描述:
这算是什么说词,告诉我a few pins,哪些pins啊?什么different行为啊?相关手册的pinout详细描述在哪里?狂晕。。。。 -------------------------------------------------------------------------------------------------------------- 测试程序如下: [cpp] view plain copy
- #include "stm8l10x.h"
-
- void GPIO_Init_my(void);
- static void BoardInit(void);
- static void CLK_Init(void);
-
- uint8_t Status=0;
-
- void main(void)
- {
- BoardInit();
- enableInterrupts();
-
- while (1)
- {
- switch(Status)
- {
- case 0://待机
- GPIO_ResetBits(GPIOD,GPIO_Pin_0);
- Status=1;
- break;
- case 1:
- GPIO_Init(GPIOD,GPIO_Pin_0,GPIO_Mode_Out_PP_High_Fast);
- Status=0;
- break;
- default:
- break;
- }
- }
- }
-
- void BoardInit(void)
- {
- CLK_Init();
- GPIO_Init_my();
- }
-
- void CLK_Init(void)
- {
- CLK_DeInit();
- CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1);
- }
-
- void GPIO_Init_my(void)
- {
- GPIO_Init(GPIOA,GPIO_Pin_2,GPIO_Mode_Out_PP_High_Fast);
- GPIO_Init(GPIOA,GPIO_Pin_3,GPIO_Mode_Out_PP_High_Fast);
-
- GPIO_Init(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP_High_Fast);
-
- GPIO_Init(GPIOC,GPIO_Pin_All,GPIO_Mode_Out_PP_High_Fast);
-
- GPIO_Init(GPIOD,GPIO_Pin_0,GPIO_Mode_Out_PP_Low_Fast);
- }
|