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

来源:互联网 发布:js 数组 unshift 编辑:程序博客网 时间:2024/05/01 14:27

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也可以多个方案选择。

0 0
原创粉丝点击