晟矽微PWM案例分析

/******************************************************************************

;  *       @型号                 : MC32F7361

;  *       @创建日期             : 2021.12.21

;  *       @公司/作者            : SINOMCU-FAE

;  *       @晟矽微技术支持       : 2048615934

;  *       @晟矽微官网           : http://www.sinomcu.com/

;  *       @版权                 : 2021 SINOMCU公司版权所有.

;  *----------------------摘要描述---------------------------------

;  *               定时器0--PWM0

;  *               P02输出波形,F=10k,D=25%                                             

******************************************************************************/

#include "user.h"

/************************************************

;  *    @函数名          : CLR_RAM

;  *    @说明            : 清RAM

;  *    @输入参数        :

;  *    @返回参数        :

;  ***********************************************/

void CLR_RAM(void)

{

    for (FSR0 = 0; FSR0 < 0xff; FSR0++)

    {

        INDF0 = 0x00;

    }

    FSR0 = 0xFF;

    INDF0 = 0x00;

}

/************************************************

;  *    @函数名            : IO_Init

;  *    @说明              : IO初始化

;  *    @输入参数          :

;  *    @返回参数          :

;  ***********************************************/

void IO_Init(void)

{

    IOP0 = 0x00;                       //io口数据位

    OEP0 = 0x3F;                       //io口方向 1:out  0:in

    PUP0 = 0x00;                       //io口上拉电阻   1:enable  0:disable

    PDP0 = 0x00;                       //io口下拉电阻   1:enable  0:disable

    P0ADCR = 0x00;                     //io类型选择  1:模拟输入  0:通用io

    IOP1 = 0x00;                       //io口数据位

    OEP1 = 0xFF;                       //io口方向 1:out  0:in

    PUP1 = 0x00;                       //io口上拉电阻   1:enable  0:disable

    PDP1 = 0x00;                       //io口下拉电阻   1:enable  0:disable

    P1ADCR = 0x00;                     //io类型选择  1:模拟输入  0:通用io

    IOP2 = 0x00;                       //io口数据位

    OEP2 = 0x0F;                       //io口方向 1:out  0:in

    PUP2 = 0x00;                       //io口上拉电阻   1:enable  0:disable

    PDP2 = 0x00;                       //io口下拉电阻   1:enable  0:disablea

    PMOD = 0x00;                       //P00、P01、P13 io端口值从寄存器读,推挽输出

    DRVCR = 0x80;                      //普通驱动

}

/************************************************

;  *    @函数名            : TIMER0_PWM_Init

;  *    @说明              : 定时器0,PWM初始化

;  *    @输入参数          :

;  *    @返回参数          :

;  ***********************************************/

void TIMER0_PWM_Init(void)

{

//最上面为项目配置文件,FCPU是FHOSC的4分频,所以FCPU为32/4 = 8MHZ

T0CR = DEF_SET_BIT6 | DEF_SET_BIT0 | DEF_SET_BIT1;     //使能PWM,CPU,8分频,DEF_SET_BIT6外使能PWN0功能

//T0定时器的频率为8/8 =1MHZ,运行一次是1US。这里设置了T0CNT为100,那么就是从100开始每隔1US就减一,也就是减100次,用时100US然后参数定时器中断。

    T0CNT = 100-1;

    T0LOAD = 100-1;                                        //100us

 //T0DATA是设置高电平在整个周期里面的时间,现在的周期是100,高电平是25,所以我们说的占空比就是25%。PWM经常控制LED灯的亮度,那么如果设置占空比为25%,那边灯亮度大概就是直接拉高亮度的25%左右。还有马达的转速等控制场景。

T0DATA = 25;

//控制位设置,下面规格书说明

PWMCR0 = 0x00;                                         //正向输出

    PWMCR1 = 0x00;                                         //普通模式

    PWMCR3 = DEF_SET_BIT2;                                 //P02端口输出

    T0EN = 1;

}

/************************************************

;  *    @函数名            : Sys_Init

;  *    @说明              : 系统初始化

;  *    @输入参数          :

;  *    @返回参数          :

;  ***********************************************/

void Sys_Init(void)

{

    GIE = 0;

    CLR_RAM();

    IO_Init();

    TIMER0_PWM_Init();

    GIE = 1;

}

/************************************************

;  *    @函数名            : main

;  *    @说明              : 主程序

;  *    @输入参数          :

;  *    @返回参数          :

;  ***********************************************/

void main(void)

{

    Sys_Init();

    while (1)

    {

    }

}

/************************************************

;  *    @函数名            : interrupt

;  *    @说明              : 中断函数

;  *    @输入参数          :

;  *    @返回参数          :

;  ***********************************************/

void int_isr(void) __interrupt

{

__asm

    movra _abuf

    swapar _PFLAG

    movra _statusbuf

__endasm;

   

__asm

    swapar _statusbuf

    movra _PFLAG

    swapr _abuf

    swapar _abuf

__endasm;

}

/**************************** end of file *********************************************/

知识点:

定时器 T0 可实现 PWM 功能(PWM0),可通过寄存器位使能或关闭 PWM 功能,并控

制端口是否输出 PWM 波形。PWM0 关闭时 T0PWM 信号为低电平。PWM0 使能后 T0CNT 从重载值开

始递减计数直到计数溢出为一个 PWM 周期:当计数到与比较寄存器 T0DATA 相等时,T0PWM 变为高

电平;当计数溢出时,T0PWM 变为低电平。

T0DATA 配有 1 个 8 位比较缓冲器(T0DT_buf)用于与 T0CNT 比较,PWM0 关闭时写 T0DATA 将

立即载入缓冲器中,而 PWM0 使能后写 T0DATA 则将在 T0 溢出时才载入缓冲器中。若要首个 PWM 周

期和占空比准确,需先写重载寄存器和比较寄存器,再使能 PWM,最后开启定时器。

T0PWM 信号的占空比计算如下:

² 高电平时间 =(T0DATA)× T0CNT 计数时钟周期

² 周期(T0 溢出时间)=(T0LOAD + 1)× T0CNT 计数时钟周期

² 占空比(高电平时间/周期)=(T0DATA)/(T0LOAD + 1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

检索引擎Elasticsearch

一.为什么要用Elasticsearch 由于我们在运行我们的项目的时候通常都是将数据存到mysql或者sql serve等数据库中&#xff0c;在进行数据搜索时使用sql 语句 like进行模糊匹配查询&#xff0c;其一&#xff1a;虽然可以查到数据&#xff0c;但是它模糊匹配查询速度较慢&#xff0…

vue前端使用pdfjs与pdfdist-mergeofd 实现预览pdf并翻页,同时解决预览pdf显示模糊的问题

vue前端使用pdfjs与pdfdist-mergeofd 实现预览pdf并翻页&#xff0c;同时解决预览pdf显示模糊的问题 插件介绍 pdfdist-mergeofd插件的作用可查看这篇文章&#xff0c;同时使用ofdjs和pdfjs遇到的问题&#xff0c;和解决方法——懒加载 该插件主要是为了解决pdfjs和ofdjs同时…

深度学习:yolov3的使用--建立模型

使用argparse模块来定义和解析命令行参数 创建一个ArgumentParser对象 parser argparse.ArgumentParser() 训练的轮数&#xff0c;每批图像的大小&#xff0c;更新模型参数之前累积梯度的次数,模型定义文件的路径。 parser.add_argument("--epochs", typeint, d…

38.第二阶段x86游戏实战2-HOOK窗口消息机制(解决多开窗口句柄问题)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

详解汉明纠错码原理以及FPGA实现

文章目录 一、汉明纠错码简介二、汉明码编码原理以及步骤三、汉明码纠错原理以及步骤四、FPGA实现74汉明编码器五、FPGA实现74汉明解码器 一、汉明纠错码简介 汉明纠错码&#xff08;Hamming Code&#xff09;是一种用于检测和纠正数据传输中错误的编码方法。它由理查德汉明&am…

无人机光电识别跟踪算法!

一、算法概述 无人机光电识别跟踪算法结合了可见光和红外成像技术&#xff0c;通过光学系统收集目标的光学信息&#xff0c;并将其转换为电信号进行处理和分析。该算法能够实现对目标的快速、准确识别与追踪&#xff0c;极大提升了无人机在复杂环境下的作业能力和效率。 二、…

Ethernet 系列(6)-- 基础学习::OSI Model

&#xff08;写在前面&#xff1a;最近在学习车载以太网的知识&#xff0c;顺便记录一下知识点。&#xff09; OSI&#xff08;Open System Interconnect &#xff09;模型是一种网络通信框架&#xff0c;由国际标准化组织&#xff08;‌ISO&#xff09;在1985年提出&#xff0…

day15:shell基础

一&#xff0c;编程语法分类&#xff08;了解&#xff09; 编程范式&#xff1a; 面向过程&#xff1a;程序通过按步骤执行函数或过程完成任务&#xff0c;强调流程控制和函数调用&#xff0c;适合流程明确的任务&#xff0c;如 C。面向对象&#xff1a;通过“类”和“对象”封…

无人机测绘遥感技术算法概述!

一、数据采集算法 航线规划算法 根据测绘任务需求&#xff0c;利用地理信息系统&#xff08;GIS&#xff09;和遥感技术&#xff0c;对无人机进行航线规划。 考虑地形、气候、障碍物等因素&#xff0c;优化飞行路径&#xff0c;确保数据采集的完整性和准确性。 传感器控制算…

Pytest-Bdd-Playwright 系列教程(6):在测试步骤函数中设置别名数据共享

Pytest-Bdd-Playwright 系列教程&#xff08;6&#xff09;&#xff1a;在测试步骤函数中设置别名&数据共享 前言一、步骤别名二、特性文件三、测试脚本四、运行测试五、小测验总结 前言 有的时候&#xff0c;为了提高可读性&#xff0c;我们需要使用不同的名称来声明相同的…

HTML 分组标签与语义化应用:合理使用 <div>、<span> 和基础语义容器

文章目录 1. `<div>` 标签特点用途示例2. `<span>` 标签特点用途示例3. `<fieldset>` 标签特点用途示例4. `<section>` 标签特点用途示例5. `<article>` 标签特点用途示例总结HTML中的分组(容器)标签用于结构化内容,将页面元素组织成逻辑区域…

关于武汉芯景科技有限公司的马达驱动芯片AT6237开发指南(兼容DRV8837)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 逻辑功能

Android View

前面我们了解了Android四大组件的工作流程&#xff0c;Android中还存在一个和四大组件地位相同的概念&#xff1a;View&#xff0c;用于向用户页面展示内容。我们经常使用的TextView、Button、ImageView控件等都继承于它&#xff0c;也会自定义View实现自定义效果。View类源码内…

谷歌插件开发学习指南

什么是谷歌插件 谷歌插件&#xff08;Chrome Extension&#xff09;是为谷歌浏览器&#xff08;Chrome&#xff09;开发的小程序&#xff0c;旨在增强浏览器的功能或用户体验。它们可以通过添加工具栏按钮、修改网页内容、集成其他服务等方式&#xff0c;实现各种功能&#xf…

linux命令行的艺术

文章目录 前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统在 Windows 下获取 Unix 工具实用 Windows 命令行工具Cygwin 技巧 更多资源免责声明 熟练使用命令行是一种常常被忽视&#xff0c;或被认为难以掌握的技能&#xff0c;但实际…

Puppeteer 与浏览器版本兼容性:自动化测试的最佳实践

Puppeteer 支持的浏览器版本映射&#xff1a;从 v20.0.0 到 v23.6.0 自 Puppeteer v20.0.0 起&#xff0c;这个强大的自动化库开始支持与 Chrome 浏览器的无头模式和有头模式共享相同代码路径&#xff0c;为自动化测试带来了更多便利。从 v23.0.0 开始&#xff0c;Puppeteer 进…

知识管理新选择!本地大模型助手“知我AI”全功能解析

抖知书老师推荐&#xff1a; 随着人工智能技术的飞速发展&#xff0c;本地大模型知识管理工具逐渐成为提高工作效率的利器。今天&#xff0c;我要向大家介绍一款名为**“知我AI”**的本地知识管理助手&#xff0c;它以其独特的功能和优势&#xff0c;正在成为众多专业人士的新…

Banana Pi BPI-R3路由器开发板运行 OrayOS物联网系统

近日&#xff0c;Banana PI开发板宣布与贝锐达成战略合作&#xff0c;贝锐OrayOS现已成功适配Banana PI的BPI-R3型号&#xff0c;并计划进一步扩展硬件支持&#xff0c;包括目前Banana PI热销的BPI-R4、BPI-R3 Mini等更多型号。这一合作为用户提供了更广泛的开发板选择&#xf…

No.24 笔记 | WEB安全 - 任意文件包含漏洞 part 6

在 Web 安全领域中&#xff0c;任意文件包含漏洞是一种较为常见且具有潜在危险性的漏洞类型。本文将详细介绍任意文件包含漏洞的概念、原理、分类、利用方法以及防护措施&#xff0c;帮助新手小白更好地理解和防范这一漏洞。&#x1f603; 一、概念 包含的定义 开发人员为了提…

森利威尔SL2516D 耐压60V内置5V功率MOS 支持PWM LED恒流驱动器芯片

一、基本特性 型号&#xff1a;SL2516D封装&#xff1a;ESOP8工作频率&#xff1a;140kHz驱动MOS管&#xff1a;内置 二、电气特性 输入电压范围&#xff1a;8V~100V&#xff08;注意&#xff0c;虽然问题中提到耐压60V&#xff0c;但根据官方信息&#xff0c;其实际耐压范围…