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处 ...
随机推荐
- 数据可视化【原创】vue+arcgis+threejs 实现立体光圈闪烁效果
本文适合对vue,arcgis4.x,threejs,ES6较熟悉的人群食用. 效果图: 素材: 主要思路: 先用arcgis externalRenderers封装了一个ExternalRender ...
- 使用JAVA调用KRPANO加密XML
KRPano自带的命令行工具krpanotools可以加密XML,具体的参数说明如下语法: krpanotools32.exe encrypt [OPTIONS] inputfiles input ...
- 【遥遥领先】Eolink IDEA 插件:零代码入侵,自动生成接口
省流版: Eolink 有 IDEA 插件吗? 有,而且遥遥领先!我们在一年半之前就发布了,而且功能更丰富! IDEA 插件市场搜索"Eolink Apikit"即可安装使用. 使 ...
- 如何提高redux开发效率?当然是redux-tookit啦!
前言 使用react-redux的朋友都经历过这种痛苦吧? 定义一个store仓库,首先创建各种文件,比如reducer.action.store...,然后 将redux和react连接使用.整个流 ...
- vscode自动格式化python代码符合pep8
vscode自动格式化python代码符合pep8 安装格式化工具打开命令行窗口安装以下工具 $ pip install -U flake8$ pip install -U autopep812在VS ...
- Writing your first Django app, part 1
Let's learn by example. Throughout this tutorial, we'll walk you through the creation of a basic pol ...
- How to start with Gradle?
How to start with Gradle? Download the latest Gradle release from http://www.gradle.org/downloads Se ...
- 研发三维GIS系统笔记/实现wgs84投影-002
四叉树代码修改完善 原来的代码中,没有使用投影转换,直接使用的是世界坐标(单位是米), CELLQuadTree::CELLQuadTree( CELLTerrainInterface* pInter ...
- 文心一言 VS 讯飞星火 VS chatgpt (114)-- 算法导论10.2 7题
七.用go语言,给出一个 O(n)时间的非递归过程,实现对一个含 n个元素的单链表的逆转.要求除存储链表本身所需的空间外,该过程只能使用固定大小的存储空间. 文心一言: 在Go语言中,你可以使用迭代方 ...
- 【论文阅读】点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps
[论文阅读]点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps 终于一次轮到了讲自己的paper了 hahaha, ...