打印
[APM32F4]

【APM32F411V Tiny Board测评】+ PWM呼吸灯

[复制链接]
283|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一个秋天|  楼主 | 2024-6-13 08:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     前段时间有幸获得了APM32F411V Tiny Board的试用机会,这款开发板是极海半导体去年年底研发主推的,有兴趣的网友可通过https://geehy.com/design/hardware_detail/33获取关于该板卡的基本信息,可通过https://geehy.com/product/fifth/APM32F411可知该板卡在该系列的配置排名。32Arm Cortex-M4F内核,工作频率120MHz512KBFlash128KBSRAM
今天来分享一下使用TMR11输出PWM,并驱动LED,实现呼吸灯效果的使用经验。
       该板卡的TMR9/10/11/12/13/14通用定时器以时基单元为核心,拥有输入捕获和输出比较等功能,可以用来测量脉冲宽度、频率和占空比,以及产生输出波形。含有一个16位的自动重装载计 数器(实现向上计数)。其结构框图如下:
        
在此之前,因为需要采用Keil开发,因此我们需要安装基于该板卡的pack支持包,官方的SDK包中有提供        
根据《APM32F411xCxE 数据手册 V1.3》可知使用GPIOB_9复用TMR11
      
     使用GPIO复用TMR功能,需要配置GPIO的通讯速率。我们知道GPIO可以配置为通用输入、通用输出、复用功能、模拟输入输出。通用输入可以配置成浮空输入、上拉输入、下拉输入,通用输出可以配置成推挽输出、开漏输出,复用功能可以用于数字外设,模拟输入输出可以用于模拟外设以及低功耗模式;可以配置使能/禁止上拉/下拉电阻;可以配置2MHz10MHz50MHz100MHz的速度,速度越大,功耗、噪声也会越大。
       通过TMR11配置产生1KHzPWM信号,这里使用GPIO的高速100MHz速率,根据计算可设定Prescaler=100-1Period=1000-1。编写的部分代码展示如下:
1. #include "main.h"  
2. #include "Board.h"  
3.   
4. int led_val=1;  
5. int led_dut=0;  
6. void delay_ms(uint16_t time)  
7. {  
8.     u16 i=0;  
9.     while(time--)  
10.     {  
11.         i=10000;  
12.         while(i--);  
13.     }  
14. }  
15.   
16. int main(void)  
17. {  
18.     GPIO_Config_T GPIO_ConfigStruct;  
19.     TMR_BaseConfig_T TMR_TimeBaseStruct;  
20.     TMR_OCConfig_T OCcongigStruct;  
21.   
22.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_TMR11);  
23.     RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOB);  
24.   
25.     /* TMR11_CH1 */  
26.     GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_9, GPIO_AF_TMR11);  
27.   
28.     /* Config TMR11 GPIO for output PWM */  
29.     GPIO_ConfigStruct.pin = GPIO_PIN_9;  
30.     GPIO_ConfigStruct.mode = GPIO_MODE_AF;  
31.     GPIO_ConfigStruct.otype = GPIO_OTYPE_PP;  
32.     GPIO_ConfigStruct.speed = GPIO_SPEED_100MHz;  
33.     GPIO_Config(GPIOB, &GPIO_ConfigStruct);  
34.   
35.     /* config TMR11 */  
36.     TMR_TimeBaseStruct.clockDivision = TMR_CLOCK_DIV_1;  
37.     TMR_TimeBaseStruct.countMode = TMR_COUNTER_MODE_UP;  
38.     TMR_TimeBaseStruct.division = 99;  
39.     TMR_TimeBaseStruct.period = 999;  
40.     TMR_ConfigTimeBase(TMR11, &TMR_TimeBaseStruct);  
41.   
42.     /* Configure channel1 */  
43.     TMR_ConfigOCStructInit(&OCcongigStruct);  
44.   
45.     OCcongigStruct.mode = TMR_OC_MODE_PWM1;  
46.     OCcongigStruct.outputState = TMR_OC_STATE_ENABLE;  
47.     OCcongigStruct.polarity = TMR_OC_POLARITY_HIGH;  
48.      
49.     OCcongigStruct.pulse = 0;  
50.     TMR_ConfigOC1(TMR11, &OCcongigStruct);  
51.     TMR_ConfigOC1Preload(TMR11, TMR_OC_PRELOAD_ENABLE);  
52.   
53.     TMR_EnableAutoReload(TMR11);  
54.     TMR_Enable(TMR11);  
55.   
56.     while(1)  
57.     {  
58.             delay_ms(10);  
59.             if(led_val == 1)led_dut+=10;  
60.             else led_dut-=10;  
61.               
62.             if(led_dut > 1000)led_val=0;  
63.             if(led_dut < 1)led_val=1;  
64.               
65.             TMR_ConfigCompare1(TMR11,led_dut);  
66.     }  
67. }  
    由于板载调试下载模块,只需一条Type-C数据线即可完成,程序实现的效果如下:


使用特权

评论回复
沙发
yinwuqing110| | 2024-6-22 15:41 | 只看该作者
本帖最后由 yinwuqing110 于 2024-6-22 15:49 编辑

兄弟盗用我的,不好吧,自己有板,自己可以测试测试呀,改改再发吧!全网很容易会搜索到的,不在二姨家发贴并不代表帖子被全网隐藏啊。这个视频附件文件怎么不下载呢,免积分的哈
PWM呼吸灯效果视频.zip (630.08 KB)

使用特权

评论回复
板凳
星辰大海不退缩| | 2024-6-22 21:28 | 只看该作者
原理输出PWM驱动LED,实现呼吸灯效果

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝