CH59x 系统16位PWM使用
以下使用CH592X做验证
CH59X系列相对于CH58X,CH57X系列的8位系统PWM多了6路的16位的PWM。
CH59X除了定时器提供的 4 路 26 位 PWM 输出之外,系统还提供了 8 路 8 位 PWM 输出(PWM4~PWM11)或 6 路 16 位 PWM 输出(PWM4~PWM9),占空比可调。
现在的PWMX例程中没有16位PWM的使用程序。
先看手册中对16位PWM的使用说明。
在使用是需要对PWMx 配置控制寄存器进行配置;

需要使用16位的根据手册提示程序中做如下配置即可:PWMX_CycleCfg(PWMX_Cycle_32);/PWMX_CycleCfg(PWMX_Cycle_31);
对应PWM通道根据现在支持的通道使用,下面以PWM4为例;现在提供的例程中没有将封好16位的PWM的API,现在使用的话参照8位的PWM的使用即可;
下面是8位的PWM使用的函数:
void PWMX_ACTOUT(uint8_t ch, uint8_t da, PWMX_PolarTypeDef pr, FunctionalState s)
{
uint8_t i; if(s == DISABLE)
{
R8_PWM_OUT_EN &= ~(ch);
}
else
{
(pr) ? (R8_PWM_POLAR |= (ch)) : (R8_PWM_POLAR &= ~(ch));
for(i = 0; i < 8; i++)
{
if((ch >> i) & 1)
{
*((volatile uint8_t *)((&R8_PWM4_DATA) + i)) = da;
}
}
R8_PWM_OUT_EN |= (ch);
}
}
(Low_Level) ? (R8_PWM_POLAR |= (CH_PWM4)) : (R8_PWM_POLAR &= ~(CH_PWM4));
对比现有例程不免发现 占空比与本函数有关*((volatile uint8_t *)((&R8_PWM4_DATA) + i)) = da;对于16位的PWM根据手册的描述程序需要做如下修改;
*((volatile uint32_t *)((&R32_PWM4_7_DATA) + i)

再结合时钟周期计算公式,16位PWM和8位的时钟周期数的选择是不一样的;16位的时钟周期计算是:RB_PWM_CYC_VALUE;在手册中可以找到这个寄存器的说明:
占空比计算:*((volatile uint32_t *)((&R32_PWM4_7_DATA) + i)) /R32_PWM_REG_CYCLE

具体使用配置如下:
PWMX_CLKCfg(1);
PWMX_CycleCfg(PWMX_Cycle_32); {
(Low_Level) ? (R8_PWM_POLAR |= (CH_PWM4)) : (R8_PWM_POLAR &= ~(CH_PWM4));
for(i = 0; i < 8; i++)
{
if((CH_PWM4 >> i) & 1)
{
*((volatile uint32_t *)((&R32_PWM4_7_DATA) + i)) = 3;
}
}
R32_PWM_REG_CYCLE = 6;
R8_PWM_OUT_EN |= (CH_PWM4); }
实测效果:

如有问题请指正。
CH59x 系统16位PWM使用的更多相关文章
- 图解单片机8位PWM、16位PWM中“位”的含义!
今天 发现很多同学 搞不懂单片机的pwm中的位表示什么意思,如很多同学会问“8位pwm.16位pwm是什么意思啊,它们有什么区别啊,其中的‘位’表示什么意思啊”.对于这些问题,今天就给大家解释下,由于 ...
- 使用VMWare虚拟机打开MFC报错:不支持16位系统
可能这个问题的比较小众,但还是提供一下自己的思路. 笔者使用的是VMWare Fusion11的版本,采用windows7sp1的虚拟机. 在打开Mac系统共享过来的VC++的MFC文件运行时报错:不 ...
- 写一个c程序辨别系统是16位or32位
方法: 32位处理器就是一次只能处理32位,也就是4个字节的数据,虚拟地址空间的最大大小是4G,而64位处理一次就能处理64位,即8个字节的数据,最大虚拟地址空间的最大大小是16T.最明显的是指针大小 ...
- Android系统移植与调试之------->如何使用PhotoShop转换24位的bmp图片为16位bmp图片
使用Android移植时候,很多图片都需要16为的bmp格式,所以研究了一下如何从24位转换成16位,供大家参阅 step1:查看bmp图片的属性,如下图所示,是24位的 step2:用PhotoSh ...
- 解决win7系统不支持16位实模式汇编程序DOS执行的问题
这学期学习了汇编,在自己电脑上发现,win7的dos不支持16位实模式. 对编程来说,不能执行程序是致命的. 在经过网上搜集资料后,得到一种解决的方法--使用dosbox软件执行 dosbox简单说, ...
- [ZigBee] 5、ZigBee基础实验——图文与代码详解定时器1(16位定时器)(长文)
1.定时器1概述 定时器1 是一个支持典型的定时/计数功能的独立16 位定时器,支持输入捕获,输出比较和PWM等功能.定时器有五个独立的捕获/比较通道.每个通道定时器要使用一个I/O 引脚.定时器用于 ...
- 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...
- [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列
Unicode编码,基础:它为世界上所有的文字系统的每个字符单位分配一个唯一的整数,该整数介于0~1114111之间,在Unicode术语中称为代码点(code point). 和其它字符编码几乎没有 ...
- nrf51822-使用16位自定义UUID
以 ble_app_uart为例 工程中创建的nus服务以及其中的两个特性值都是128位的UUID.nordic sdk中使用128位UUID的方式和标准128UUID类似,它是提供一个基准UUID, ...
- verilog实现16位五级流水线的CPU带Hazard冲突处理
verilog实现16位五级流水线的CPU带Hazard冲突处理 该文是基于博主之前一篇博客http://www.cnblogs.com/wsine/p/4292869.html所增加的Hazard处 ...
随机推荐
- C#的重载决策
重载是许多编程语言支持的特性.所谓重载,就是指可以定义多个名称相同但参数(个数.类型和顺序)不同的方法(函数).先来看一个例子: void Main() { char cvalue = 'a'; ma ...
- 性能监控平台搭建(grafana+telegraf+influxdb) 及 配置 jmeter后端监听
搞性能测试,可以搭建Grafana+Telegraf+InfluxDB 监控平台,监控服务器资源使用率.jmeter性能测试结果等. telegraf: 是一个用 Go 编写的代理程序,可收集系统和服 ...
- 【实践篇】DDD脚手架及编码规范
一.背景介绍 我们团队一直在持续推进业务系统的体系化治理工作,在这个过程中我们沉淀了自己的DDD脚手架项目.脚手架项目是体系化治理过程中比较重要的一环,它的作用有两点: (1)可以对新建的项目进行统一 ...
- 华为云ECS上搭建Hadoop集群环境启动时报错“java.net.BindException: Cannot assign requested address”问题的解决
启动时使用: ./sbin/start-all.sh 1 报错: java.net.BindException: Problem binding to [test7972:9000] java.net ...
- SQL Server用户的设置与授权
SQL Server用户的设置与授权 SSMS 登陆方式有两种,一是直接使用Windows身份验证,二是SQL Server身份验证.使用SQL Server用户设置与授权不仅可以将不同的数据库开放给 ...
- 一款广受社区好评的 WAF
大家好,我是 Java陈序员,我们有时会搭建一个属于自己的网站,但是自建网站很容易被收到攻击,今天给大家介绍一款简单免费好用的 WAF 网站防护工具. WAF 是 Web Application Fi ...
- Solution -「洛谷 P1852」跳跳棋
Description Link. 在一个数轴上给你三个点,移动方法是彼此为中点进行跳跃,不能同时越过两颗棋子. 给出初始状态和目标状态,问能否从初始状态跳到目标状态.若能,输出最少步数. 棋子之间互 ...
- Solution Set -「ABC 197」
「ABC 197A」Rotate Link. 略. #include<bits/stdc++.h> using namespace std; int main(){ char a,b,c; ...
- mysql 管理员常用命令
1.创建用户 create user admin@localhost identified by 'password'; 2.赋权 grant privileges ON database.table ...
- 不能显式拦截ajax请求的302响应?
记录工作中早该加深印象的一个小case: ajax请求不能显式拦截 302响应. 我们先来看一个常规的登录case: 浏览器请求资源,服务器发现该请求未携带相关凭据(cookie或者token) 服务 ...