[活动] 【APM32F402R Micro-EVB测评】+ 开箱后点个呼吸灯

[复制链接]
 楼主| 地瓜patch 发表于 2025-8-1 22:25 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 地瓜patch 于 2025-8-9 21:10 编辑
#每日话题# #申请原创#  @21小跑堂

一,开箱

IMG_20250804_222741.jpg IMG_20250804_222757.jpg IMG_20250804_222654.jpg
参加极海开发板大放送活动,喜得APM32F402 Micro-EVB开发板。
拿到开发板,开箱先欣赏板子,第一眼的感觉最准确。美不美就看第一眼的感觉。
APM32F402 内核强大,接口丰富
32 位 Arm® Cortex-M4F 内核,最高 120MHz 工作频率,Flash:容量最高为 128KB,SRAM:容量最高为 32KB

1 个 I2C 接 口 ( 1Mbit/s ), 支 持SMBus/PMBus
3 个 USART,1 个 UART,支持ISO7816、LIN 和 IrDA 等功能
2 个 SPI(1 个可复用 I2S),最大传输速度 18Mbps–
2 个 CAN,通信波特率最大为 1Mbit/s
1 个 USB OTG-FS
2 个 12 位的 ADC
2 个可以提供 7 通道 PWM 输出的 16位高级定时器 TMR1/8,支持死区生成和刹车输入等功能–
1 个 32 位通用定时器 TMR2,3 个 16位通用定时器 TMR3/4/5,每个定时器有 4 个独立通道可以用来输入捕获、输出比较、PWM 与脉冲计数等功能–
2 个看门狗定时器:一个独立看门狗IWDT 和一个窗口看门狗 WWDT–
1 个 24 位自减型系统定时器 Sys TickTimer


二、软件环境
先搭建软件开发环境再点灯。
我用keil开发,所以呢下载了APM32F4xx_DFP.Pack开发包,下载地址在   珠海极海半导体有限公司 | 搜索中心     https://www.geehy.com/search?keyword=pack
57872688dbb3c71eff.png
需要注意的一点是,编译器需要选择compiler version5.9以上版本,否则报错。我用的6.0版本。
91374688dbb72539ed.png
从mdk中可以选择元件
17775688ed8169a067.png
将开发板通过usb连接到电脑,在debug中选择下载器为极海winUSB
9209688ed87ed6311.png


三、资料准备
同样从官网下到开发板的图纸。图纸连接如下
https://www.geehy.com/uploads/tool/APM32F402R%20Micro-EVB%20V1.0.SchDoc.pdf
从图上可以看到。两个连接IO口的LED分别连接到PB6和PB7。

75559688dbc20d4d3f.png
从官网下载APM32F402数据手册,下载连接如下
https://www.geehy.com/uploads/to ... E5%86%8C%20V1.1.pdf
从手册中可以看到PB6复用功能是TMR4-CH1、PB7复用功能是TMR4-CH2。这就方便了用定时器4产生PWM调节LED的亮度。
75609688dbde02c475.png

另外,为了方便工程师入门该芯片,官网提供软件开发资料,demo例程,选择的包中需要支持APM32F402,下载地址为
https://www.geehy.com/design/software
9169688dbeea0e3b6.png

四、实现
呼吸灯,通过输出变化得PWM来实现灯光亮度的渐变。那么输出到LED的PWM就是一个逐渐变化的数值。注意,APM32F402 Micro-EVB开发板中两颗LED都是正极接VCC,负极接IO。那么PWM变大,LED亮度变暗,反之PWM变小,LED变亮。
程序很简单,初始化定时器,初始化IO,输出变化的PWM到对应的IO即可实现灯光亮度的渐变控制。
程序如下:

void TMR_Config(uint8_t value)//完成TMR4的定义及分频、占空比等参数配置
{
    TMR_BaseConfig_T tmrBaseConfig;
    TMR_OCConfig_T tmrOCConfig;

    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR4);

    /* TMR1 clock source frequency = 120MHz */
    tmrBaseConfig.countMode = TMR_COUNTER_MODE_UP;
    tmrBaseConfig.clockDivision = TMR_CLOCK_DIV_1;
    tmrBaseConfig.period = 100;
    tmrBaseConfig.division = 119;
    tmrBaseConfig.repetitionCounter = 0;
    TMR_ConfigTimeBase(TMR4, &tmrBaseConfig);

    /* 50% PWM */
    tmrOCConfig.mode = TMR_OC_MODE_PWM1;
    tmrOCConfig.outputState = TMR_OC_STATE_ENABLE;
    tmrOCConfig.outputNState = TMR_OC_NSTATE_DISABLE;
    tmrOCConfig.polarity = TMR_OC_POLARITY_HIGH;
    tmrOCConfig.nPolarity = TMR_OC_NPOLARITY_HIGH;
    tmrOCConfig.idleState = TMR_OC_IDLE_STATE_RESET;
    tmrOCConfig.nIdleState = TMR_OC_NIDLE_STATE_RESET;
               
                tmrOCConfig.pulse = value;
    TMR_ConfigOC2(TMR4, &tmrOCConfig);

    TMR_EnablePWMOutputs(TMR4);
    TMR_Enable(TMR4);
}

void TMR_GPIO_Config(void)//完成IO引脚的定义
{
    GPIO_Config_T gpioConfig;

    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOB);

    gpioConfig.speed = GPIO_SPEED_50MHz;
    gpioConfig.mode = GPIO_MODE_AF_PP;
    gpioConfig.pin = GPIO_PIN_7;
    GPIO_Config(GPIOB, &gpioConfig);
}


int main(void)
{                TMR_BaseConfig_T tmrBaseConfig;
                TMR_OCConfig_T tmrOCConfig;
//    BOARD_LED_Config(LED2);

    TMR_GPIO_Config();
    TMR_Config(0);
                TMR_EnablePWMOutputs(TMR4);
    /* Infinite loop */
    while (1)  //进行PWM即占空比的递增、递减计算
    {
                                if(flag==10)
                                {
                                        pwm_cnt++;
                                                
                                }
                                else if(flag==11)
                                {
                                        pwm_cnt--;
                                
                                }   
                                if(pwm_cnt >= 105)
                                {
                                                flag=11;
                                }
                                if(pwm_cnt <= 10)
                                {
                                                flag=10;
                                }        
                                for(uint16_t j=0;j<2550;j++)
                         {
                                                for(uint16_t i=0;i<500;i++)
                                                {
                                                         __NOP();
                                                }
                                        }
                        TMR_Config(pwm_cnt);
    }
}

测试视频如下



五、小结
测试下来,总体来说APM32F402使用很简单,板载调试下载器省去了购买下载器的额外麻烦。
完成了软件开发环境的配置以后,剩下的都是康庄大路。
推荐极海,大家都来玩一下。


六、上文中所提到资料如下
PACK
Geehy.APM32F4xx_DFP.1.0.8.zip (6.64 MB, 下载次数: 0)
图纸
APM32F402R Micro-EVB V1.0.SchDoc.pdf (127.17 KB, 下载次数: 0)

手册
APM32F402xB 数据手册 V1.1.pdf (2.13 MB, 下载次数: 0)

例程
TMR_TMR4CH2PWMOutput.zip (347.38 KB, 下载次数: 1)










Gfan 发表于 2025-8-5 09:41 | 显示全部楼层
好顶赞~看到大佬还分享了视频
不过温馨提示一下,标题格式应该是【APM32F402 Micro-EVB开发板测评】+xxxx噢
暗夜幽灵骑士 发表于 2025-8-6 12:27 | 显示全部楼层
感谢分享!APM32F402开发板的接口确实丰富,性能强大。从你的开箱和测评来看,这款开发板的性价比很高,适合进行多种嵌入式项目开发。
DawnFervor 发表于 2025-8-6 19:20 | 显示全部楼层
Cortex-M4的实力还是强。性价比相当关的一颗MCU
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1800

主题

14824

帖子

29

粉丝
快速回复 在线客服 返回列表 返回顶部

1800

主题

14824

帖子

29

粉丝
快速回复 在线客服 返回列表 返回顶部