这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】+极海APM32F411V之PWM呼吸灯

共6条 1/1 1 跳转至

【换取手持数字示波器】+极海APM32F411V之PWM呼吸灯

专家
2024-06-09 22:18:13   被打赏 30 分(兑奖)     打赏

     前段时间有幸在某论坛上获得了APM32F411V Tiny Board的试用机会,这款开发板是极海半导体去年年底研发主推的,有兴趣的网友可通过https://geehy.com/design/hardware_detail/33获取关于该板卡的基本信息,可通过https://geehy.com/product/fifth/APM32F411可知该板卡在该系列的配置排名。32位Arm Cortex-M4F内核,工作频率120MHz,512KB的Flash,128KB的SRAM。

       关于这块开发板的硬件资源这里就不再赘述,今天来分享一下使用TMR11输出PWM,并驱动LED,实现呼吸灯效果的使用经验。

       该板卡的TMR9/10/11/12/13/14通用定时器以时基单元为核心,拥有输入捕获和输出比较等功能,可以用来测量脉冲宽度、频率和占空比,以及产生输出波形。含有一个16位的自动重装载计 数器(实现向上计数)。其结构框图如下:

定时器结构框图.png        在此之前,因为需要采用Keil开发,因此我们需要安装基于该板卡的pack支持包,官方的SDK包中有提供,这里提供一下。

Geehy.APM32F4xx_DFP.1.0.4.zip

        根据《APM32F411xCxE 数据手册 V1.3》可知使用GPIOB_9复用TMR11。

管脚复用.png       使用GPIO复用TMR功能,需要配置GPIO的通讯速率。我们知道GPIO可以配置为通用输入、通用输出、复用功能、模拟输入输出。通用输入可以配置成浮空输入、上拉输入、下拉输入,通用输出可以配置成推挽输出、开漏输出,复用功能可以用于数字外设,模拟输入输出可以用于模拟外设以及低功耗模式;可以配置使能/禁止上拉/下拉电阻;可以配置2MHz、10MHz、50MHz、100MHz的速度,速度越大,功耗、噪声也会越大。

        预通过TMR11配置产生1KHz的PWM信号,这里使用GPIO的高速100MHz速率,根据计算可设定Prescaler=100-1,Period=1000-1。编写的部分代码展示如下:

#include "main.h"
#include "Board.h"

int led_val=1;
int led_dut=0;
void delay_ms(uint16_t time)
{
	u16 i=0;
	while(time--)
	{
		i=10000;
		while(i--);
	}
}

int main(void)
{
    GPIO_Config_T GPIO_ConfigStruct;
    TMR_BaseConfig_T TMR_TimeBaseStruct;
    TMR_OCConfig_T OCcongigStruct;

    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_TMR11);
    RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOB);

    /* TMR11_CH1 */
    GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_9, GPIO_AF_TMR11);

    /* Config TMR11 GPIO for output PWM */
    GPIO_ConfigStruct.pin = GPIO_PIN_9;
    GPIO_ConfigStruct.mode = GPIO_MODE_AF;
    GPIO_ConfigStruct.otype = GPIO_OTYPE_PP;
    GPIO_ConfigStruct.speed = GPIO_SPEED_100MHz;
    GPIO_Config(GPIOB, &GPIO_ConfigStruct);

    /* config TMR11 */
    TMR_TimeBaseStruct.clockDivision = TMR_CLOCK_DIV_1;
    TMR_TimeBaseStruct.countMode = TMR_COUNTER_MODE_UP;
    TMR_TimeBaseStruct.division = 99;
    TMR_TimeBaseStruct.period = 999;
    TMR_ConfigTimeBase(TMR11, &TMR_TimeBaseStruct);

    /* Configure channel1 */
    TMR_ConfigOCStructInit(&OCcongigStruct);

    OCcongigStruct.mode = TMR_OC_MODE_PWM1;
    OCcongigStruct.outputState = TMR_OC_STATE_ENABLE;
    OCcongigStruct.polarity = TMR_OC_POLARITY_HIGH;
    
    OCcongigStruct.pulse = 0;
    TMR_ConfigOC1(TMR11, &OCcongigStruct);
    TMR_ConfigOC1Preload(TMR11, TMR_OC_PRELOAD_ENABLE);

    TMR_EnableAutoReload(TMR11);
    TMR_Enable(TMR11);

    while(1)
    {
			delay_ms(10);
			if(led_val == 1)led_dut+=10;
			else led_dut-=10;
			
			if(led_dut > 1000)led_val=0;
			if(led_dut < 1)led_val=1;
			
			TMR_ConfigCompare1(TMR11,led_dut);
    }
}

    由于板载调试下载模块,只需一条Type-C数据线即可完成,程序实现的效果如下:

PWM呼吸灯.gif

       至此分享告一段落,有疑问的欢迎留言评论,分享一下关于该板卡的资料手册。

APM32F411xCxE 数据手册 V1.3.pdf

APM32F411xCxE 用户手册 V1.4.pdf

PWM呼吸灯.zip




关键词: 极海APM32F411V     PWM呼吸灯    

专家
2024-06-10 09:41:39     打赏
2楼

感谢楼主分享


高工
2024-06-10 15:25:53     打赏
3楼

感谢楼主分享


专家
2024-06-10 15:36:04     打赏
4楼

感谢楼主分享


专家
2024-06-10 15:54:17     打赏
5楼

还可以啊


高工
2024-06-10 16:04:58     打赏
6楼

感谢楼主分享


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]