博客
关于我
STM8的C语言编程(14)--+PWM
阅读量:792 次
发布时间:2023-01-23

本文共 1679 字,大约阅读时间需要 5 分钟。

在单片机应用系统中,PWM信号是一个非常重要的输出功能,广泛应用于控制电机转速、LED亮度等场景。STM8单片机的PWM模块简单易于使用,能够通过配置寄存器来设置占空比和频率。

PWM信号基础知识

PWM信号由两个关键参数决定:

  • 周期/频率:定义信号的高低电平重复次数。例如,频率为1KHZ意味着信号每秒重复1次。
  • 占空比:决定高电平占总周期的比例。例如,占空比为30%的信号在高电平状态下保持300uS,低电平保持700uS。
  • 实现PWM输出

    STM8单片机的PWM模块基于定时器的计数器和比较器原理。具体步骤如下:

  • 初始化定时器模式

    • 使用TIM_Init()函数配置定时器为PWM模式。
    • 设置TIM2_CMR2寄存器为PWM输出模式。
  • 设置自动装载寄存器

    • 通过设置TIM2_CCR2寄存器,决定PWM的频率。
    • 根据公式F_pwm = CPU时钟频率 / 256,计算合适的寄存值。
  • 初始化比较寄存器

    • 设置TIM2_CCR2寄存器值决定占空比。
  • 编程实现

    • 在主循环中,通过改变比较寄存器值,逐步调节占空比。
    • 实现占空比从0%递增到100%,再递减到0%的循环过程。
  • 代码示例

    #include "STM8S207C_S.h"void CLK_Init(void) {    CLK_CKDIVR = 0x11; // 16MHZ / 4 = 4MHZ    CLK_CPUCLK = 0x02; // CPU clock = 2MHZ}void TIM_Init(void) {    TIM2_CMR2 |= 0x70; // Configurer TIM2-chan1 en PWM mode    TIM2_CCER1 |= 0x30; // Low polarity, enable PWM    TIM2_PSCR = 0; // 1x clock divisor    TIM2_CR1 |= 0x01; // Start counter}void DelayMS(unsigned int ms) {    unsigned char i;    while (ms != 0) {        for (i = 0; i < 250; i++) {            DelayMS(5);        }        for (i = 0; i < 75; i++) {            DelayMS(5);        }        ms--;    }}void main() {    CLK_Init();    TIM_Init();    unsigned char i;    while (1) {        for (i = 0; i < 128; i++) {            TIM2_CCR2H = 0;            TIM2_CCR2L = i;            DelayMS(5);        }        for (i = 128; i > 0; i--) {            TIM2_CCR2H = 0;            TIM2_CCR2L = i;            DelayMS(5);        }    }}

    代码解析

  • CLK_Init()

    • 配置时钟分频器为1x,即计时器时钟为4MHZ。
  • TIM_Init()

    • 配置定时器2-chan1为PWM输出模式。
    • 设置自动装载寄存器和比较寄存器,启用PWM输出。
  • DelayMS()

    • 延时函数用于调节PWM波形的占空比变化时间。
  • main()

    • 在程序入口初始化时钟和定时器。
    • 进入无限循环,首先设置占空比为0%-128%。
    • 然后设置占空比从128%-0%,实现回波纹效果。
  • 测试验证

  • 连接示波器观察PWM波形。
  • 调整比较寄存器值,控制占空比。
  • 测试代码是否符合预期。
  • 通过以上步骤,可以在STM8单片机上实现简单且可靠的PWM控制功能,满足多种应用需求。

    转载地址:http://kneyk.baihongyu.com/

    你可能感兴趣的文章
    学习Vue.js2.0(国外视频教程)
    查看>>
    CUDA9.1、cuDNN7在Ubuntu16.04上的安装
    查看>>
    微信小程序云开发:怎么删除云函数?已解决
    查看>>
    解决微信小程序项目导入的问题:app.json 未找到、 __wxConfig is not defined
    查看>>
    非迅捷|PDF、Word、PPT、Excel、图片等互相在线转换:免费、简单、快速、零错误、无套路
    查看>>
    PyCharm配置anaconda环境
    查看>>
    查找最小值栈的O(1)
    查看>>
    Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
    查看>>
    概念唱片Plastic Beach封面高清壁纸
    查看>>
    LINUX-WIFI无线接入的一些东西
    查看>>
    word文档手写字母总会大写问题
    查看>>
    Redis中的key
    查看>>
    Spring 和 DI 依赖注入
    查看>>
    laravel server error 服务器内部错误
    查看>>
    iJ配置Maven环境详解
    查看>>
    面试题 08.01. 三步问题
    查看>>
    剑指 Offer 11. 旋转数组的最小数字
    查看>>
    作为我的第一篇csdn博客吧
    查看>>
    一道简单的访问越界、栈溢出pwn解题记录
    查看>>
    响应的HTTP协议格式+常见的响应码
    查看>>