历史上的今天
今天是:2025年02月04日(星期二)
2020年02月04日 | stm8s003 PD4引脚多个功能应用指南
2020-02-04 来源:eefocus
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也可以多个方案选择。
史海拾趣




