本帖最后由 稚逸君 于 2023-1-4 11:12 编辑

【灵动微电子 L0136 温控器/遥控器应用】创建工程模板+点灯
1、开发板简介
首先感谢平台提供的测评活动,拿到开发板的时候,还是比较惊艳的。灵动的工程师对于开发板硬件设计真的很懂,很多地方都体现着设计美感。开发板的板载硬件资源非常丰富,有LCD,eeprom,flash,按键,ADC,LED,音频,红外等等,基于开发板可以直接diy出很好的作品了。
board.png
图1-1 开发板图

2、创建工程模板
首先要说的是,灵动提供的官方网站,可以直接生成对应的实验工程,但是对于我来说,自动生成的工程目录结构,让我有点不太习惯,所以,我自己建一个工程模板,为后续的功能移植开发打下一个基础,其实基本也是拷贝的helloworld实验工程的文件,只是目录结构自己整理了一下。
2.1 创建工程目录,目录结构如下
mm32l0136c7p_hal_non_t(主目录,存放工程文件)
——core(用于存放启动文件,官方核心库)
——user(用于存放用户代码文件)
——hal_lib(用于存放官方hal库)
——driver(用于存放硬件驱动代码文件)
2.2 创建工程,对工程进行相应的配置
这里不详述工程创建及配置的过程了,因为网上关于创建keil工程的教程很多,只将工程模板打包上传上来,可根据这个工程做对比修改即可。
需要注意的是,工程需要增加一个官方的 mm32l0136c_flash 文件,这里将文件放在 core 目录下,并将文件添加到工程配置中。
create1.png
图2-1 工程设置1

3、点灯实验
3.1 硬件电路
从官方原理图截取的 led 硬件电路原理图如下:
led1.png
图3-1 led原理图1
led2.png
图3-2 led原理图2
从图3-1及图3-2可知,led驱动对应的芯片管脚及方式如下:
LED0 —— PB9 —— 输出低电平点亮 —— 红色
LED1 —— PB10 —— 输出低电平点亮 —— 绿色
LED2 —— PB11 —— 输出低电平点亮 —— 蓝色
LED3 —— PC0 —— 输出低电平点亮 —— 黄色
3.2 实验程序
//led.c
  • #include "led.h"
  • #include "hal_rcc.h"
  • void led_init(void)
  • {
  •     GPIO_Init_Type gpio_initstruct;
  •     RCC_EnableAHBPeriphs(RCC_AHB_PERIPH_GPIOB, true);
  •     RCC_EnableAHBPeriphs(RCC_AHB_PERIPH_GPIOC, true);
  •     gpio_initstruct.Pins = GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11;
  •     gpio_initstruct.PinMode = GPIO_PinMode_Out_OpenDrain;
  •     gpio_initstruct.Speed = GPIO_Speed_50MHz;
  •     GPIO_Init(GPIOB, &gpio_initstruct);
  •     gpio_initstruct.Pins = GPIO_PIN_0;
  •     GPIO_Init(GPIOC, &gpio_initstruct);
  •     GPIO_SetBits(GPIOB, GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11);
  •     GPIO_SetBits(GPIOC, GPIO_PIN_0);
  • }
  • void delay(uint16_t ms)
  • {
  •     uint16_t i;
  •     while(ms--)
  •     {
  •         i = 4800;
  •         while(i--);
  •     }
  • }
  • 复制代码
    //led.h
  • #ifndef _LED_H
  • #define _LED_H
  • #include "stdint.h"
  • #include "hal_gpio.h"
  • #define red_led_on() GPIO_ClearBits(GPIOB, GPIO_PIN_9);
  • #define red_led_off() GPIO_SetBits(GPIOB, GPIO_PIN_9);
  • #define green_led_on() GPIO_ClearBits(GPIOB, GPIO_PIN_10);
  • #define green_led_off() GPIO_SetBits(GPIOB, GPIO_PIN_10);
  • #define blue_led_on() GPIO_ClearBits(GPIOB, GPIO_PIN_11);
  • #define blue_led_off() GPIO_SetBits(GPIOB, GPIO_PIN_11);
  • #define yellow_led_on() GPIO_ClearBits(GPIOC, GPIO_PIN_0);
  • #define yellow_led_off() GPIO_SetBits(GPIOC, GPIO_PIN_0);
  • void led_init(void);
  • void delay(uint16_t ms);
  • #endif
  • 复制代码
    //main.c
  • #include "board_init.h"
  • #include "led.h"
  • int main(void)
  • {
  •     BOARD_Init();
  •     led_init();
  •     while (1)
  •     {
  •         delay(500);
  •         red_led_on();
  •         delay(500);
  •         red_led_off();
  •     }
  • }
  • 复制代码
    4、实验结果
    编译,0错误,0警告,nice!
    build.png
    图4-1 工程编译
    因为还没有准确的延时函数,红色led大概每秒闪烁一次,实验成功。

    5、总结
    应用灵动官方的hal库函数开发,基本上与传统的stm32开发模式没什么区别,开发思路一致,细节处对看看函数定义就能理解了。
    实验工程程序下载:
    mm32l0136c7p_hal_non_led.rar (1.4 MB, 下载次数: 0)
    继续阅读本篇相关更多标签
    mcu
    举报
    您需要登录后才可以评论 登录 立即注册
    全部回复 0
    暂无评论,快来抢沙发吧