stm8s003 PD4引脚多个功能应用指南

stm8s003的PD4引脚比较特殊,主要有3个功能。

下面对不同功能进行设置讲解。


功能一,普通IO口:

普通IO就不详细讲了,stm8s的引脚设置就一句话,最多带中断多两句,很简单


功能二,TIM2_CH1输出

这个引脚可以使用TIM2的通道一进行PWM输出,在使用该功能的时候不需要设置标志位直接初始化即可。

代码如下:

void Beep_Tim2_Pwm_Init(uint16_t CCR1_Val)
{
  /* Time base configuration */
  TIM2_TimeBaseInit(TIM2_PRESCALER_16, 999);

  /* PWM1 Mode configuration: Channel1 */ 
  TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);
  TIM2_OC1PreloadConfig(ENABLE);

  TIM2_ARRPreloadConfig(ENABLE);

  /* TIM2 enable counter */
  TIM2_Cmd(ENABLE);
}

上面的代码初始化完了之后就可以使用PD4引脚输出PWM了

另外值得一提的有两个函数:

TIM2_SetAutoreload(0x0000);	//频率

TIM2_SetCompare1(0x0000);	//占空比

第一个函数修改输出PWM的频率,第二个函数修改输出PWM的占空比。


功能三,BEEP引脚:

这个引脚可以直接驱动蜂鸣器,但是在使用的时候需要设置option。

可以在stvp软件中设置,也可以用如下代码设置:

初始化代码:

void Beep_Init(BEEP_Frequency_TypeDef BEEP_Frequency)
{
  CLK_LSICmd(ENABLE);
  BEEP_LSICalibrationConfig(128000);
  BEEP_Init(BEEP_Frequency);
  BEEP_Cmd(ENABLE);
}


修改option代码:

void Set_Beep_OptionByte(void)
{
  uint16_t Beep_Option_status;
  Beep_Option_status=FLASH_ReadOptionByte(0x4803);
  if(Beep_Option_status&0x8000)
  {
    FLASH_ProgramOptionByte(0x4803,(uint8_t)(Beep_Option_status&0x7fff));
  }
}

最后值得一提的是BEEP功能的频率使用很有限

typedef enum {
  BEEP_FREQUENCY_1KHZ = (uint8_t)0x00,  /*!< Beep signal output frequency equals to 1 KHz */
  BEEP_FREQUENCY_2KHZ = (uint8_t)0x40,  /*!< Beep signal output frequency equals to 2 KHz */
  BEEP_FREQUENCY_4KHZ = (uint8_t)0x80   /*!< Beep signal output frequency equals to 4 KHz */
} BEEP_Frequency_TypeDef;

在ST的库函数中仅定义了1KHZ , 2KHZ , 4KHZ

实话实说,不如直接用TIM2_CH1输出PWM灵活,不过当你用TIM2做其他功能的时候,这个引脚初始化为BEEP也可以多个方案选择。

你可能感兴趣的:(STM8S)