地瓜patch 发表于 2025-8-1 22:25

【开发板型号测评】+ 开箱后点个呼吸灯

本帖最后由 地瓜patch 于 2025-8-4 22:35 编辑

#每日话题# #申请原创#@21小跑堂

一,开箱

参加极海开发板大放送活动,喜得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

需要注意的一点是,编译器需要选择compiler version5.9以上版本,否则报错。我用的6.0版本。

从mdk中可以选择元件

将开发板通过usb连接到电脑,在debug中选择下载器为极海winUSB



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


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


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


四、实现
呼吸灯,通过输出变化得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);
    }
}

测试视频如下
https://www.bilibili.com/video/BV1FXhuzoERg/
https://www.bilibili.com/video/BV1JdhuzREVi/

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


六、上文中所提到资料如下
PACK

图纸


手册


例程











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
页: [1]
查看完整版本: 【开发板型号测评】+ 开箱后点个呼吸灯