pwm.c源文件代码如下:
//TIM14 PWM部分初始化
//PWM输出初始化
//arr:自动重装值 psc:时钟预分频数
void TIM14_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); //TIM14时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能PORTF时钟
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GF9复用为 TIM14
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIOF9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度 50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化PF9
TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14
//初始化TIM14 Channel1 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性低
TIM_OC1Init(TIM14, &TIM_OCInitStructure); //初始化外设TIM1 4OC1
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); //使能预装载寄存器
TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE 使能
TIM_Cmd(TIM14, ENABLE); //使能TIM14
}
此部分代码包含了上面介绍的PWM输出设置的前5 个步骤。这里我们关于TIM14 的设置就不再说了。
接下来,我们看看主程序里面的main函数如下:
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200);//初始化串口波特率为115200
TIM14_PWM_Init(500-1,84-1); //定时器时钟为84M,分频系数为84,所以计数频率
//为84M/84=1Mhz,重装载值500,所 以PWM频率为 1M/500=2Khz.
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;//dir==1 led0pwmval递增
else led0pwmval--; //dir==0 led0pwmval递减
if(led0pwmval>300)dir=0;//led0pwmval到达 300后,方向为递减
if(led0pwmval==0)dir=1; //led0pwmval递减到 0后,方向改为递增
TIM_SetCompare1(TIM14,led0pwmval); //修改比较值,修改占空比
}
}
这里,我们从死循环函数可以看出,我们将led0pwmval这个值设置为PWM比较值,也就是通过led0pwmval 来控制 PWM 的占空比,然后控制 led0pwmval 的值从 0 变到 300,然后又从 300变到0,如此循环,因此DS0 的亮度也会跟着信号的占空比变化从暗变到亮,然后又从亮变到暗。至于这里的值,我们为什么取 300,是因为PWM的输出占空比达到这个值的时候,我们的 LED 亮度变化就不大了(虽然最大值可以设置到 499),因此设计过大的值在这里是没必要的。至此,我们的软件设计就完成了。
上一篇:STM32f4输入捕获实验代码
下一篇:STM32f4定时器中断实验代码
推荐阅读
史海拾趣
在快速发展的同时,Goldentech始终关注环境保护和社会责任。公司积极推行绿色制造理念,采用环保材料和节能技术,减少生产过程中的碳排放和资源消耗。此外,Goldentech还投入大量资金研发可回收和可降解的半导体产品,旨在为全球电子行业的可持续发展贡献力量。这一环保理念不仅提升了公司的社会形象,还吸引了更多注重可持续发展的客户和合作伙伴。
随着物联网、可穿戴设备等新兴领域的兴起,Goldentech敏锐地捕捉到了市场的新机遇。公司迅速调整战略方向,加大在微型化、低功耗半导体器件的研发投入。通过引入先进的制造工艺和封装技术,Goldentech成功推出了一系列适用于物联网和可穿戴设备的高性能离散半导体产品。这些产品凭借出色的性能和稳定性,在市场中获得了广泛认可,为公司的持续发展注入了新的动力。
Datalinear公司成立于20世纪初,由一群热衷于数据处理的工程师创立。初创时期,公司面临着资金短缺、技术瓶颈和市场竞争激烈的挑战。然而,创始人凭借着对技术的执着和对市场的敏锐洞察力,成功开发出一款高效的数据处理设备,满足了当时市场对数据处理速度的需求。这款产品迅速在市场上打开销路,为Datalinear公司赢得了第一桶金。
在竞争激烈的电子行业中,Datalinear公司意识到单打独斗很难取得长远的发展。因此,公司积极寻求与其他企业的合作。通过与上下游企业的紧密合作,Datalinear公司不仅降低了生产成本,还提高了产品质量和交货速度。此外,公司还与一些科研机构建立了合作关系,共同研发新技术和新产品,实现了共赢的局面。
2022年,川土微电子的CA-IS3062W产品荣获了中国IC设计成就奖之“年度最佳隔离器”。这一荣誉的获得不仅是对川土微电子技术实力的肯定,也进一步提升了公司在行业内的知名度。同时,这也为川土微电子未来的发展奠定了坚实的基础。
2016年,上海川土微电子有限公司(简称“川土微电子”)正式成立,标志着Chipanalog川土微电子的诞生。作为一家专注于模拟芯片产品研发与销售的高科技公司,川土微电子从成立之初就明确了其核心使命——为中国电子信息制造企业提供高品质进口替代模拟芯片。在创始人及团队的共同努力下,公司迅速确定了发展方向,并开始着手研发首款模拟芯片产品。
为啥我做的cy7c68001 usb插到电脑上一点反映都没有啊 来自EEWORLD合作群:arm fpga linux 嵌入1(63762526) 群主:wangkj… 查看全部问答∨ |
|
我的PSM设置如下: UINT8 PLAT_DefineArrayParameters(PSM_OEMInfoPtr oem_info_ptr) { static const PSM_OEMInfo oem_info = { /* PhysicalReadStartAddress * ...… 查看全部问答∨ |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Threading; namespace ...… 查看全部问答∨ |
昨天去了青岛的新唐研讨会,送了两块板子,回来后实践,按照默认进行按照。进入到隐藏超级无敌深的目录后正常编译运行,于是将该目录拷出来放到我的一个文件夹下,打算以此工程作为最小工程模板(个人比较懒),重新编译,发现有错误(如图一示), ...… 查看全部问答∨ |
|
在AM335x移植LINUX内核后,在启动过程中大体为分以下几步:ROM加载的过程、SPL加载、U-boot加载、kernel加载。第一步:ROM加载,这一步也叫做RBL过程。ROM引导内容放在芯片ROM内,这是处理器初使化的第一步,在这步完成后进行第二步加载。第二步:S ...… 查看全部问答∨ |
|
经过差不多两个星期的学习、试验,终于用LaunchPadG2553把LCD1602驱动起来了,参考学习了坛友们之前发出来的资料和代码,但是调不通,无奈只能自己学习,然后编写代码,现在一切都能显示正常,现将关于LCD1602的资料和自己编写的代码和用于CCS开发 ...… 查看全部问答∨ |