3236|6

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【 ST NUCLEO-G071RB测评】_08_PWM定时器控制三色LED实验 [复制链接]

本帖最后由 lvxinn2006 于 2019-1-22 17:15 编辑

本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!

【实验目的】
· 掌握PWM定时器的原理与使用
· 掌握PWM在控制LED亮度功能上的应用

【实验环境】
· NUCLEO-G071RB开发板
· 三色LED灯模块
· Keil MDK-ARM(Keil uVision 5.25.2.0)
· Keil.STM32G0xx_DFP.1.0.0.pack

【实验资料】
· NUCLEO-G071RB开发板原理图
· STM32G071x8/xB Data Sheet
· STM32G071芯片用户参考手册

【实验分析
1、电气连接关系
红色R LED        ——> PC9
绿色G LED        ——> PC8
蓝色B LED        ——> PC10

2GPIO引脚配置
由上图可知,PC8PC9PC10三个引脚分别对应着TIM1_CH1TIM1_CH2TIM1_CH3,所以需要把三个引脚都配置成AF2模式。
所以需要把这三个引脚配置成响应的AF模式,即AF2

3、启用TIM1定时器
如图设置,可以通过配置[11]位启用TIM1的时钟。

4、配置定时器
高级控制定时器(TIM1)由一个可编程的预分频器驱动的16位自动重装计数器组成,可用于多种用途,包括测量输入的脉冲长度。输入信号的捕获,或输出波形(包括输出比较,PWM,死区插入互补的PWM)
脉冲长度和波形周期可以在几微秒内进行调制。通过设定定时器预分频器和RCC时钟控制器,可以将定时器的工作时钟周期控制在毫秒级别。高级控制定时器(TIM1)和通用定时器器是完全独立的,不共享任何资源。
高级控制定时器原理如下:
本实验主要使用该定时器产生PWM信号,通过控制PWM占空比,使用不同占空比的信号,驱动三个颜色的LED灯,以控制三个LED灯的亮度等级,就可以搭配出不同颜色。
在定时器输出PWM信号的应用中,最重要的寄存器有:
ARR                ——计数重载寄存器,决定了PWM的周期;
CCRx        ——比较匹配寄存器,决定了不同引脚的PWM占空比;
CNT                ——定时器计数器,定时器计数器可以自增或自减,变化的过程中,不断与CCRx进行比较,一旦CNT达到CCRx的值时,就可以驱动响应的输出引脚发生电平的反转。

关于PWM相关配置的描述如下:


实验代码
  1. #include "stm32g0xx.h"                  // Device header
  2. #include <stdlib.h>

  3. void mdelay(int ms)
  4. {
  5.         RCC->APBENR1 |= RCC_APBENR1_TIM6EN;        //使能TIM6
  6.         TIM6->PSC = SystemCoreClock / 1000 - 1;        //预分频 定时器时钟为1000Hz
  7.         TIM6->ARR = ms;        //周期数
  8.         TIM6->CR1 |= TIM_CR1_OPM;        //单次脉冲模式
  9.         TIM6->CR1 |= TIM_CR1_CEN;        //启动定时器
  10.         while(TIM6->CR1 & TIM_CR1_CEN);        //等待定时器结束
  11. }

  12. void rgb_init(void)
  13. {
  14.         /* 初始化IO引脚 */
  15.         RCC->IOPENR |= RCC_IOPENR_GPIOCEN;        //使能GPIOC
  16.         GPIOC->MODER &= ~(0x3F<<16);
  17.         GPIOC->MODER |= (0x2A<<16);        //设置PC8 9 10为AF模式
  18.         GPIOC->AFR[1] &= ~(0xFFF<<0);
  19.         GPIOC->AFR[1] |= (0x222<<0);//设置PC8 9 10为AF2
  20.         
  21.         /* 初始化定时器TIM1 */
  22.         RCC->APBENR2 |= RCC_APBENR2_TIM1EN;        //启用TIM1时钟
  23.         TIM1->CR1 = (1<<7);        //允许auto-reload
  24.         TIM1->CCMR1 = (0x6<<4) | (1<<3)
  25.                                 | (0x6<<12) | (1<<11); //设置CH1 CH2为PWM模式
  26.         TIM1->CCMR2 = (0x6<<4) | (1<<3);        //设置CH3为PWM模式
  27.         TIM1->CCER |= (1<<0) | (1<<4) | (1<<8); //使能CH1,2,3的输出功能
  28.         TIM1->BDTR |= (1<<15);        //使能定时器的主输出功能
  29.         TIM1->PSC = 99;        //分频值
  30.         TIM1->ARR = 255;        //计数最大值,决定PWM周期
  31.         TIM1->CNT = 0;        //重置定时器计数器
  32.         TIM1->CR1 |= (1<<0); //启动定时器
  33. }

  34. int main(void)
  35. {
  36.         int rgb;
  37.         rgb_init();
  38.         while(1){
  39.                 rgb = rand();
  40.                 TIM1->CCR1 = rgb&0xff;        //CH1比较值,决定CH1占空比
  41.                 TIM1->CCR2 = (rgb>>8)&0xff; //CH2比较值,决定CH2占空比
  42.                 TIM1->CCR3 = (rgb>>16)&0xff; //CH3比较值,决定CH3占空比
  43.                 mdelay(100);
  44.         }
  45. }
复制代码




【实验现象】
· 三色LED会不断的改变颜色



此内容由EEWORLD论坛网友lvxinn2006原创,如需转载或用于商业用途需征得作者同意并注明出处



此帖出自stm32/stm8论坛

最新回复

嗯嗯嗯  详情 回复 发表于 2019-1-23 09:54
点赞 关注(1)
 

回复
举报

1366

帖子

6

TA的资源

版主

沙发
 
1、楼主使用寄存器操作值得赞一波,这样在评测中更能深入了解这块MCU
2、楼主为何不妨使用下cubemx?或者官方的库接口?
此帖出自stm32/stm8论坛

点评

评测芯片,从底层寄存器角度出发,才能看清与其他芯片的区别,如果寄存器没问题,再使用库函数会感觉简单很多。最重要的是,项目太小,几行代码实现的功能,细节自己把控。  详情 回复 发表于 2019-1-22 11:30
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
RCSN 发表于 2019-1-22 10:37
1、楼主使用寄存器操作值得赞一波,这样在评测中更能深入了解这块MCU
2、楼主为何不妨使用下cubemx?或者 ...

评测芯片,从底层寄存器角度出发,才能看清与其他芯片的区别,如果寄存器没问题,再使用库函数会感觉简单很多。最重要的是,项目太小,几行代码实现的功能,细节自己把控。
此帖出自stm32/stm8论坛

点评

嗯,期待楼主的继续评测帖子  详情 回复 发表于 2019-1-22 13:19
 
 

回复

1366

帖子

6

TA的资源

版主

4
 
lvxinn2006 发表于 2019-1-22 11:30
评测芯片,从底层寄存器角度出发,才能看清与其他芯片的区别,如果寄存器没问题,再使用库函数会感觉简单 ...

嗯,期待楼主的继续评测帖子
此帖出自stm32/stm8论坛
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 
 

回复

1万

帖子

2854

TA的资源

管理员

5
 
颜色很好看。赞赞赞
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

透过一层纸,看起来有点像不同颜色的月亮  详情 回复 发表于 2019-1-23 09:39
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

6
 
okhxyyo 发表于 2019-1-22 21:29
颜色很好看。赞赞赞

透过一层纸,看起来有点像不同颜色的月亮
此帖出自stm32/stm8论坛

点评

嗯嗯嗯  详情 回复 发表于 2019-1-23 09:54
 
 
 

回复

1万

帖子

2854

TA的资源

管理员

7
 
lvxinn2006 发表于 2019-1-23 09:39
透过一层纸,看起来有点像不同颜色的月亮

嗯嗯嗯
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

玩板看这里:

https://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表