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处 ...
随机推荐
- 使用LabVIEW 实现物体识别、图像分割、文字识别、人脸识别等深度视觉
前言 哈喽,各位朋友们,这里是virobotics(仪酷智能),这两天有朋友私信问之前给大家介绍的工具包都可以实现什么功能,最新的一些模型能否使用工具包加载,今天就给大家介绍一下博主目前使用工具包已经 ...
- 关于Vue的就地更新策略的解析
在Vue中使用v-for渲染列表时,默认使用就地更新策略.该策略默认是基于索引的,规定在列表绑定的数据元素顺序变化时,不会重新创建整个列表,而只是更新对应DOM元素上的数据.以下代码实现了一个TODO ...
- [ABC132D] Blue and Red Balls
2023-01-16 题目 题目传送门 翻译 翻译 难度&重要性(1~10):3 题目来源 AtCoder 题目算法 dp 解题思路 因为蓝球的数量是固定的,题目让我们求,在取 \(i\) 次 ...
- 【Hexo】NexT 主题的配置使用记录
目录 简介 版本 安装 配置记录 风格/主题 网页图标 菜单栏 侧边栏 本地搜索 代码块 动画效果 阅读进度 书签 Mermaid lazyload fancybox pangu 捐赠 版权声明 不蒜 ...
- Paddle图神经网络训练-PGLBox代码阅读笔记
图存储部分 paddle/fluid/framework/fleet/heter_ps graph_gpu_wrapper.h GPU图主入口 graph_gpu_ps_table.h GPU图的主要 ...
- SQL select关联表查询 统计另一个表合计
db_order 是记录订单的, 一个订单一条记录.(oid, 运费, 实收金额, 产品KEY.......) db_soid 是记录出售商品的 (id, 商品名称, 售价, 数量, 成本, 标识 ...
- 用OLED屏幕播放视频(2): 为OLED屏幕开发I2C驱动
下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第2篇, 主要总结和记录一个I ...
- Shell脚本中文英文多语言国际化和命令行批处理(bash sh cmd bat)中定义函数的简单写法
目录 命令行脚本参考 - bat 命令行脚本参考 - bash 值得学习的知识点 1. 识别终端使用的语言 2. 函数的编写 3. 获取用户的输入 4. bat文件老是乱码怎么办 有时候为了方便别人使 ...
- VMware Work Station使用ubuntu20.04挂载共享文件夹写入文件时出现输入/输出错误
原因是默认的max_write为0x00020000即128k,超过此大小会报错,另外big_writes,umask等选项也要加上, sudo /usr/bin/vmhgfs-fuse .host: ...
- Openssl Des3对压缩文件进行加密命令详解
群友提问: 致力于明天: tar -cvf - WMG_Back_"$Today"|openssl des3 -salt -k hY91gd3GJAAfghECleLwWQAPGK ...