使用platformio平台的libopencm3开发框架来开发stm32g0,下面使用pwm来实现led呼吸灯效果。
1 新建项目在pio主页新建项目pwm,框架选择libopencm3,开发板选择 monkeypi_stm32_g070rb;新建完成后在src目录新建主程序文件main.c;然后更改项目文件platformio.ini的烧写和调试方式:1upload_protocol = cmsis-dap2debug_tool = cmsis-dap2 pwm配置gpio设置为复用pwm输出1/** 2 * @brief gpio config 3 * 4 */ 5static void gpio_setup(void) 6{ 7 rcc_periph_clock_enable(rcc_gpioc); 8 9 gpio_mode_setup(gpioc,10 gpio_mode_af,11 gpio_pupd_none,12 gpio12);1314 gpio_set_output_options(gpioc,gpio_otype_pp,gpio_ospeed_50mhz,gpio12);1516 //tim14_ch1 , af217 gpio_set_af(gpioc,gpio_af2,gpio12);18}pwm配置1/** 2 * @brief pwm channel setup 3 * 4 */ 5static void pwm_setup(void) 6{ 7 rcc_periph_clock_enable(rcc_tim14); 8 9 /* timer global mode:10 * - no divider11 * - alignment edge12 * - direction up13 */14 timer_set_mode(tim14, tim_cr1_ckd_ck_int, tim_cr1_cms_edge, tim_cr1_dir_up);1516 /*17 * apb1 pre = 1, timpclk = pclk18 * apb1 pre != 1, timpclk = pclk * 219 */20 timer_set_prescaler(tim14, (rcc_apb1_frequency/100000-1)); //100khz2122 /* disable preload. */23 timer_disable_preload(tim14);24 timer_continuous_mode(tim14);2526 /* timer period */27 timer_set_period(tim14, 20-1); /* 100khz /20 = 5 khz */2829 /* set the initual output compare value for oc1. */30 timer_set_oc_mode(tim14, tim_oc1, tim_ocm_pwm1);31 timer_set_oc_value(tim14, tim_oc1, 20*0.3); //duty = 0.33233 /* enable output */34 timer_enable_oc_output(tim14, tim_oc1);35 timer_enable_counter(tim14);36}先配置定时器的预分频和周期,这里设置到周期为5khz,可以参考定时器章节的说明;
然后使用timer_set_oc_value 设置占空比,占空比根据定时器周期计算,比如这里设置为30%占空比;
将程序烧写到开发板后可以测量引脚的输出pwm波形如下:
image-20220912105400109
3 呼吸灯效果实现呼吸灯效果就是更改占空比,让其从0-100变化在从100-0变化即可;
1int duty = 0; 2 3while(1){ 4 5 //from 0 - 100 6 for(duty=0; duty <= 100; duty++){ 7 duty = duty + 1; 8 timer_set_oc_value(tim14,tim_oc1, 20*duty/100); 910 //delay some time11 for(int i=0; i=0; duty--){18 duty = duty - 1;19 timer_set_oc_value(tim14,tim_oc1, 20*duty/100);2021 //delay some time22 for(int i=0; i<600000; i++){23 __asm__(nop);24 }2526 }2728}通过 timer_set_oc_value 改变输出占空比,然后延时一定时间即可达到呼吸灯的效果。
研究人员利用英特尔的神经形态芯片Loihi,开发出了一种人造皮肤
数码摄像机快门
德国普莱玛半导体项目签约落户宁波北仑“芯港小镇”
东芝传感器新技术能让自动驾驶车看的更清晰
王成录:EMUI11充分借鉴了鸿蒙2.0的分布式技术
STM32G0开发笔记:用PWM来实现LED呼吸灯效果
又一中国制造被德国人抢购一空
解析AI创业三大模式,下个产业浪潮的“独角兽”
当你沉浸在AR技术的体验时,是否想过会侵犯你的隐私
电动汽车轻量化或将是增加续航里程的最有效途径
差压流量计的常见问题及解决方法
【产品应用】一键远程运维管理CATCOM-100 DTU传输终端
高通收购恩智浦半导体,将成下一个MCU龙头?
saas与传统软件的区别
传iPhone 7采用防水设计 抛弃全铝机身设计
VR比平板更能减轻疼痛 当VR成为“数字新药” 打一把游戏看一场病
2023半程已过硅料价格触底?下半年硅料、硅片市场展望
自动理财的万能小金卡,刘强东绝妙一招,马云心跳淘宝
涡轮流量计的常见故障处理
分享一种Indigo参数化诊断仪方案