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---输入捕获实验代码(01)
下一篇:STM32f4---PWM输出实验代码
推荐阅读
史海拾趣
在电子连接器领域取得成功后,Degson开始寻求多元化发展,并逐步拓展到其他相关行业。公司利用自身在电子连接器领域的技术优势和经验积累,成功开发出了一系列应用于工业自动化、仪器仪表、电梯、电力电气等领域的电子产品。这些新产品不仅丰富了Degson的产品线,还进一步扩大了公司的市场份额和影响力。通过多元化发展,Degson在电子行业中的地位得到了进一步巩固和提升。
随着市场需求的不断变化,Degson意识到只有不断创新和升级产品,才能在激烈的市场竞争中保持领先地位。因此,公司投入大量资金用于研发,并在技术上取得了重大突破。Degson成功研发出了一系列新型接线端子和精密模具,不仅提高了产品的性能和质量,还降低了生产成本。这些新产品迅速在市场上获得了广泛应用,进一步巩固了Degson在电子连接器领域的领先地位。
随着科技的不断进步和市场环境的变化,Fairchild公司也面临着转型和创新的挑战。为了保持竞争力和市场地位,Fairchild公司不断加大对新技术和新产品的研发投入。同时,公司也积极寻求与其他企业和研究机构的合作,共同推动半导体技术的创新和发展。通过这些努力,Fairchild公司成功实现了从传统半导体制造商向创新型科技企业的转型。
以上五个故事简要概述了Fairchild公司在电子行业发展的历程和成就。作为半导体行业的领军企业之一,Fairchild公司凭借其卓越的技术实力、创新能力和市场洞察力,为电子行业的发展做出了重要贡献。
随着公司业务的不断发展,启臣微开始积极拓展海外市场。公司在西安设立研发中心,在深圳和昆山设立销售中心,并与多家国际知名企业建立了合作关系。这些举措不仅提升了公司的国际影响力,也为公司带来了更多的发展机遇。
在成都启臣微电子股份有限公司成立之初,公司就致力于集成电路及系统产品的设计、生产与销售。面对激烈的市场竞争,启臣微坚持创新,投入大量研发资源,终于在高性能功率管理集成电路领域取得了重大技术突破。这一突破不仅提升了公司的市场竞争力,也为公司赢得了业界的广泛认可。
Chip Technologies Inc自成立以来,一直致力于芯片技术的研发与创新。在某一年,公司成功研发出一款具有划时代意义的芯片,这款芯片在功耗、性能及集成度等方面均达到了行业领先水平。这一技术突破迅速赢得了市场的认可,公司订单量激增,业绩大幅提升。随着技术的不断迭代与完善,Chip Technologies Inc逐渐在电子行业树立起了技术领先的形象,并成功吸引了众多投资者的关注。
国庆期间写的,最初发表在了电子工程师阶梯论坛。这几天整理了一下,上传给大家分享。讲述了AT89S52单片机的各个模块的使用,并给出了代码和说明。 所有代码自己调试并进行了仿真,欢迎大家拍砖! [ 本帖最后由 shuijian 于 2008-10-29 22:17 编辑 ...… 查看全部问答∨ |
|
【摘 要】随着城市化水平的不断提高和城市照明系统的不断扩大,节约能源并提高路灯系统的可靠性成了十分紧迫 的课题。目前很多城市的交通路灯的能源利用率不高,这不符合党中央下达的“建设节约型社会”的号召。CC2480是TI公司 生产的基于ZigBee ...… 查看全部问答∨ |
请大家帮忙,我设计的RS485总线通信线路,一共接了25个设备,驱动芯片用的RS485(有几个用了RS483),总线传输数据时干扰很大。 现在电路在每个终端处有20K的上拉和下拉电阻(分别接A和B,A上拉,B下拉),另外在A,B处跨接120欧姆的匹配电阻。不知 ...… 查看全部问答∨ |
有人说CPLD资源使用过多会发热严重,影响稳定性。 现有一项目准备做PCB了,有一EPM7128的宏单元用了88%引脚用了86%,不知对稳定性是否真的有影响?以前的项目都没用过这么多的。 请有此类经验的同仁给点意见。。。… 查看全部问答∨ |
|
刚开始学习PLC,遇到问题了,希望大家能帮帮忙。 用电脑(作为上位机)通过RS232口与PLC(作为下位机)连接,上位机的串口通信程序我会编写,但是下位机的程序是怎么编写的?在网上搜到手都酸了,都找不到下位机的通信 ...… 查看全部问答∨ |
最近使用stmf103做一个信号采集的实验板,觉得用usb传数据比较方便(主要是笔记本上都不带串口啊)。比较后打算用usb的虚拟串口功能比较好。有主机端的驱动程序,又有设备端的例程。 但是用起来有很多问题。因为是实时 ...… 查看全部问答∨ |