STM32
直播中

姬盼希

9年用户 1027经验值
擅长:控制/MCU
私信 关注
[问答]

STM8S001J3 swim脚设为输出不起作用的原因?

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

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




void SWIMset_IO(void)
{
    /* 配置TXenable  IO 为输出模式 */
   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)
  {
    ;  
  }

}



回帖(1)

杨福林

2024-4-23 17:50:05
可能的原因包括:

1. SWIM脚可能已被锁死。在STM8S001J3中,为了防止意外的SWIM编程,SWIM脚在上电时默认为输入模式。要解锁SWIM脚并使其可以配置为输出模式,需要进行一系列特定的事件和操作,才能确保其解锁。

2. 在设置SWIM脚为输出模式之前,可能需要先停用SWIM功能。这通常可以通过设置作为SWIM接口的JTAG控制器的相应寄存器来实现。

3. 您的代码中可能存在其他问题。请确保您在设置SWIM脚之前正确初始化相关外设和引脚,并检查您的代码是否存在任何错误。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分