打印
[应用相关]

【转】STM8L101F3P6的PD0使用异常,尚未解决~!

[复制链接]
646|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
问题描述:
在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);   
  • }  


发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

116

帖子

0

粉丝