IO口模拟PWM,实现呼吸灯效果代码
直接上代码
ST芯片hal库,初始化不完整,主要看功能。
int main(void)
{
int led_count=0,led_flag=0;
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pins : PB5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
while(1)
{
test++;
if(test%2000==0)
{
if(!led_flag) //flag==0渐亮
led_count++; //模拟占空比
else //flag==1渐灭
led_count--;
}
if(led_count >= 3000) led_flag=1;//亮到上限,开始渐灭
if(led_count <= 0)
{
led_flag=0; //暗到下限,开始渐亮
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
MSDelay(500); //灭灯500ms
led_count=1; //防止下一次循环再次进入此判断条件
}
if(test%10000 < led_count) //led_count最大为9999
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);//亮
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);//灭
}
}
}