necleo-f401re板子跑AIios-things系统实现点亮LD2
点灯实验环境介绍关于AIios-thingsSTM32f401REHAL库开始编程具体步骤结果显示(LD2点亮)环境介绍硬件:一块STM32NUCLEO-F411RE开发板,一个ST-Link;软件:装好ST-Link的驱动程序,Keil5;文档:开发板的原理图、芯片的参考手册和HAL驱动说明书。系统:AIios-things。关于AIios-thingsAliOS Things...
环境介绍
硬件:一块STM32 NUCLEO-F411RE开发板,一个ST-Link;
软件:装好ST-Link的驱动程序,Keil5;
文档:开发板的原理图、芯片的参考手册和HAL驱动说明书。
系统:AIios-things。
关于AIios-things
AliOS Things 将致力于搭建云端一体化 IoT 基础设施,具备极致性能、极简开发、云端一体、丰富组件、安全防护等关键能力,并支持终端设备连接到阿里云 Link,可广泛应用在智能家居、智慧城市、工业,新出行等领域。
阿里云IoT - 所知不止于感知](https://iot.aliyun.com/products/aliosthings?spm=5176.12825654.h2v3icoap.334.54562c4aSYItZN)
STM32f401RE
参考MB1136 原理图可以看到 NUCLEO F401一共有三颗LED。
LD1:ST-Link的通讯指示灯,在我们烧录程序和调试的时候可以观察到LD1的变化。
LD2:如下图该LED连接在PA5与PB13引脚,默认情况下连接在PA5,SB42通过0R电阻短接,SB29断开连接。
LD3:LD3是作为5V的供电指示灯,当外部供电或者USB供电正常时该LED正常点亮。
这一次要点亮的是LD2,从电路图我们可以看出管脚是PA5。
HAL库
stm32hal库的GPIO函数库在stm32f4xx_hal_gpio.h。
点灯用到GPIO,alios要忽略硬件之间的差异,必然得提供一份统一的API及差异化的硬件配置,统一的API提供了GPIO的初始化、读写操作,而差异化的硬件配置则针对特定的硬件平台。
与ST提供的HAL库相对应的是AIios里提供的hal_gpio_stm32f4xx.h。
/*
* Copyright (C) 2015-2017 Alibaba Group Holding Limited
*/
#ifndef __HAL_GPIO_STM32F4_H
#define __HAL_GPIO_STM32F4_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32f4xx_hal.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include "aos/hal/gpio.h"
#include "aos/kernel.h"
#include "board.h"
typedef struct{
uint16_t port; //Logical Port
void* GpioGroup; //GPIOA, GPIOB
uint16_t Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
uint16_t Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIO_speed_define */
gpio_pinstate_t defaultLogicalVal;//only used for output
}gpio_mapping_t;
typedef struct gpio_irq_slop {
int32_t pin_num;
int32_t irq_num;
gpio_irq_handler_t handler;
void * priv;
} gpio_irq_slop_t;
extern const gpio_mapping_t gpio_mapping_table[];
#define PINS_IN_GROUP 16
#define GROUP_GPIOA 0
#define GROUP_GPIOB 1
#define GROUP_GPIOC 2
#define GROUP_GPIOD 3
#define GROUP_GPIOE 4
#define HAL_GPIO_0 ((uint8_t)0) /* represent GPIOA pin 0 */
#define HAL_GPIO_1 ((uint8_t)1) /* represent GPIOA pin 1 */
#define HAL_GPIO_2 ((uint8_t)2) /* represent GPIOA pin 2 */
#define HAL_GPIO_3 ((uint8_t)3) /* represent GPIOA pin 3 */
#define HAL_GPIO_4 ((uint8_t)4) /* represent GPIOA pin 4 */
#define HAL_GPIO_5 ((uint8_t)5) /* represent GPIOA pin 5 */
#define HAL_GPIO_6 ((uint8_t)6) /* represent GPIOA pin 6 */
#define HAL_GPIO_7 ((uint8_t)7) /* represent GPIOA pin 7 */
#define HAL_GPIO_8 ((uint8_t)8) /* represent GPIOA pin 8 */
#define HAL_GPIO_9 ((uint8_t)9) /* represent GPIOA pin 9 */
#define HAL_GPIO_10 ((uint8_t)10) /* represent GPIOA pin 10 */
#define HAL_GPIO_11 ((uint8_t)11) /* represent GPIOA pin 11 */
#define HAL_GPIO_12 ((uint8_t)12) /* represent GPIOA pin 12 */
#define HAL_GPIO_13 ((uint8_t)13) /* represent GPIOA pin 13 */
#define HAL_GPIO_14 ((uint8_t)14) /* represent GPIOA pin 14 */
#define HAL_GPIO_15 ((uint8_t)15) /* represent GPIOA pin 15 */
#define HAL_GPIO_16 ((uint8_t)16) /* represent GPIOB pin 0 */
#define HAL_GPIO_17 ((uint8_t)17) /* represent GPIOB pin 1 */
#define HAL_GPIO_18 ((uint8_t)18) /* represent GPIOB pin 2 */
#define HAL_GPIO_19 ((uint8_t)19) /* represent GPIOB pin 3 */
#define HAL_GPIO_20 ((uint8_t)20) /* represent GPIOB pin 4 */
#define HAL_GPIO_21 ((uint8_t)21) /* represent GPIOB pin 5 */
#define HAL_GPIO_22 ((uint8_t)22) /* represent GPIOB pin 6 */
#define HAL_GPIO_23 ((uint8_t)23) /* represent GPIOB pin 7 */
#define HAL_GPIO_24 ((uint8_t)24) /* represent GPIOB pin 8 */
#define HAL_GPIO_25 ((uint8_t)25) /* represent GPIOB pin 9 */
#define HAL_GPIO_26 ((uint8_t)26) /* represent GPIOB pin 10 */
#define HAL_GPIO_27 ((uint8_t)27) /* represent GPIOB pin 11 */
#define HAL_GPIO_28 ((uint8_t)28) /* represent GPIOB pin 12 */
#define HAL_GPIO_29 ((uint8_t)29) /* represent GPIOB pin 13 */
#define HAL_GPIO_30 ((uint8_t)30) /* represent GPIOB pin 14 */
#define HAL_GPIO_31 ((uint8_t)31) /* represent GPIOB pin 15 */
#define HAL_GPIO_32 ((uint8_t)32) /* represent GPIOC pin 0 */
#define HAL_GPIO_33 ((uint8_t)33) /* represent GPIOC pin 1 */
#define HAL_GPIO_34 ((uint8_t)34) /* represent GPIOC pin 2 */
#define HAL_GPIO_35 ((uint8_t)35) /* represent GPIOC pin 3 */
#define HAL_GPIO_36 ((uint8_t)36) /* represent GPIOC pin 4 */
#define HAL_GPIO_37 ((uint8_t)37) /* represent GPIOC pin 5 */
#define HAL_GPIO_38 ((uint8_t)38) /* represent GPIOC pin 6 */
#define HAL_GPIO_39 ((uint8_t)39) /* represent GPIOC pin 7 */
#define HAL_GPIO_40 ((uint8_t)40) /* represent GPIOC pin 8 */
#define HAL_GPIO_41 ((uint8_t)41) /* represent GPIOC pin 9 */
#define HAL_GPIO_42 ((uint8_t)42) /* represent GPIOC pin 10 */
#define HAL_GPIO_43 ((uint8_t)43) /* represent GPIOC pin 11 */
#define HAL_GPIO_44 ((uint8_t)44) /* represent GPIOC pin 12 */
#define HAL_GPIO_45 ((uint8_t)45) /* represent GPIOC pin 13 */
#define HAL_GPIO_46 ((uint8_t)46) /* represent GPIOC pin 14 */
#define HAL_GPIO_47 ((uint8_t)47) /* represent GPIOC pin 15 */
#define ON_BOARD_LED01 HAL_GPIO_16
#define ON_BOARD_LED02 HAL_GPIO_32
#define ON_BOARD_LED03 HAL_GPIO_30
#define GPIOA_SPEED GPIO_SPEED_FREQ_VERY_HIGH
#ifdef __cplusplus
}
#endif
#endif /* __HAL_GPIO_STM32L4_H */
GPIO映射得知LD2在AliOS中其编号为5
开始编程
1.在AIiOS中选择定制你的AIiOS thing,勾选stm32f401re的板子,APP就勾选helloworld这个最初始的例程。(需要登录才可以下载,选下载keil)
2.用keil5打开,编译运行一下是否会出错。使用ST-Link下载进板子里测试,串口调试看是否有打印输出,有则表明系统在板子里有跑起来。
3.就在helloworld这个例程上进行更改。
具体步骤
int application_start(int argc, char *argv[])
这个是应用程序的入口函数,因为是OS,跟裸机的编程框架是不同的。
#define GPIO_LED_IO 5
gpio_dev_t led;
static void app_delayed_action(void *arg)
{
hal_gpio_output_toggle(&led);
aos_post_delayed_action(500, app_delayed_action, NULL);
}
int application_start(int argc, char *argv[])
{
led.port=GPIO_LED_IO;
led.config=OUTPUT_PUSH_PULL;//上拉输出
hal_gpio_init(&led);
hal_gpio_output_high(&led);
aos_loop_run();
return 0;
}
const gpio_mapping_t gpio_mapping_table[TOTAL_GPIO_NUM] =
{
{ON_BOARD_LED01, GPIOB, GPIO_PIN_0, /*IRQ_NULL,*/GPIO_PULLUP, GPIO_SPEED_FREQ_LOW},
{ON_BOARD_LED02, GPIOA, GPIO_PIN_5, /*IRQ_NULL,*/GPIO_PULLUP, GPIO_SPEED_FREQ_LOW},
{ON_BOARD_LED03, GPIOB, GPIO_PIN_14, /*IRQ_NULL,*/GPIO_PULLUP, GPIO_SPEED_FREQ_LOW}
};
gpio_mapping_table中将LED02的管脚改成PA5.
hal_gpio_stm32f4xx.h
#define ON_BOARD_LED02 HAL_GPIO_5
下载完成后复位开发板
结果显示(LD2点亮)
更多推荐
所有评论(0)