hqw 发表于 2019-10-15 10:11:20

STM8S001J3 swim脚设为输出不起作用的问题

请教下大家,上电后延时5S(防swim脚锁死),再把SWIM脚设成输出脚,让它能输出高低电平。但实测,这脚一直是高电平。是否我下面的设置,不足以让SWIM脚成功设成输出?

/* 定义TXenableIO PORT与PIN   SWIM   */   
#define TXenable_GPIO_PORT(GPIOD)
#define TXenable_GPIO_PINS(GPIO_PIN_5)




void SWIMset_IO(void)
{
    /* 配置TXenableIO 为输出模式 */
   GPIO_Init(TXenable_GPIO_PORT, (GPIO_Pin_TypeDef)TXenable_GPIO_PINS,GPIO_MODE_OUT_PP_HIGH_SLOW);//上电时不发射

}

/**
* @函数名       AutoCHK
* @功能      
* @参数       无
* @返回值       无
*/
void AutoCHK(void)
{
   GPIO_WriteLow(TXenable_GPIO_PORT,(GPIO_Pin_TypeDef)TXenable_GPIO_PINS);
   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
   GPIO_WriteHigh(TXenable_GPIO_PORT,(GPIO_Pin_TypeDef)TXenable_GPIO_PINS);
   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);


   GPIO_WriteLow(TXenable_GPIO_PORT,(GPIO_Pin_TypeDef)TXenable_GPIO_PINS);
   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
   GPIO_WriteHigh(TXenable_GPIO_PORT,(GPIO_Pin_TypeDef)TXenable_GPIO_PINS);
   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
}



void main(void)
{
IoSetUp_Init();

/* LED初始化 */
LED_Init();

    GPIO_WriteLow(LED_GPIO_PORT,LED_GPIO_PINS);
    Delay(0xFFFF);Delay(0xFFFF);Delay(0xFFFF); Delay(0xFFFF);   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
    Delay(0xFFFF);Delay(0xFFFF);Delay(0xFFFF); Delay(0xFFFF);   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
    Delay(0xFFFF);Delay(0xFFFF);Delay(0xFFFF); Delay(0xFFFF);   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
    Delay(0xFFFF);Delay(0xFFFF);Delay(0xFFFF); Delay(0xFFFF);   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
    GPIO_WriteHigh(LED_GPIO_PORT,LED_GPIO_PINS);


    Delay(0xFFFF);Delay(0xFFFF);Delay(0xFFFF); Delay(0xFFFF);   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);
    Delay(0xFFFF);Delay(0xFFFF);Delay(0xFFFF); Delay(0xFFFF);   Delay(0xFFFF); Delay(0xFFFF); Delay(0xFFFF);


   if(!GPIO_ReadInputPin(OUTPUTselect_GPIO_PORT, (GPIO_Pin_TypeDef)OUTPUTselect_GPIO_PINS))   OUTPUTmode=RESET;//RESET:有物高
   else                                                                                       OUTPUTmode=SET;// SET:

   if ((GPIO_ReadInputData(EXTI_GPIO_PORT) & EXTI_GPIO_PINS) == 0x00)//无物
{
      GPIO_WriteHigh(LED_GPIO_PORT, LED_GPIO_PINS);

      if(OUTPUTmode==RESET)   GPIO_WriteLow(OUTPUT_GPIO_PORT,OUTPUT_GPIO_PINS);
      else                  GPIO_WriteHigh(OUTPUT_GPIO_PORT,OUTPUT_GPIO_PINS);

}
else   //有物
{
   GPIO_WriteLow(LED_GPIO_PORT, LED_GPIO_PINS);

      if(OUTPUTmode==RESET)   GPIO_WriteHigh(OUTPUT_GPIO_PORT,OUTPUT_GPIO_PINS);
      else                  GPIO_WriteLow(OUTPUT_GPIO_PORT,OUTPUT_GPIO_PINS);
}


/* 外部中断初始化 */
EXTI_Init();

/* 使能总中断 */
enableInterrupts();

    SWIMset_IO();
    AutoCHK();


while (1)
{
    ;
}

}


hqw 发表于 2019-10-15 16:38:39

是高低电平延时时间过短,我又是用万用表来测,测不出有变化。用示波器来测就对了

butterflyspring 发表于 2019-10-15 16:45:48

那个pin上对应的其他引脚有没有设置?另外断开外部连接来量测该引脚,用最简单的程序确定你的输出是否正确。
页: [1]
查看完整版本: STM8S001J3 swim脚设为输出不起作用的问题