一、简介
合宙Air32F103开发板板载Air32F103CBT6,兼容STM32F103C8T6,价格太香了,首发9.9包邮。自带DAPLink固件,可以直接当DAPLink使用。
官方详细介绍(含资料):Air32F103 Wiki,开发板开发板PinOUT图:
将在本栏目简单介绍使用基于此开发板的调试,以调试阿里云为导向,完成各部分的调试,预计要更新的内容包括:GPIO、USART、LCD、KEY、DHT11、阿里云。
所有的程序将重新移植官方例程,并且重写工程,参考正点原子的风格建立工程目录。
二、调试例程
使用官方例程,可以快速验证开发环境、下载方式等问题。
2.1下载例程
在Air32F103Gitee上面下载使用官方SDK例程。
AIR_Jlink_Keil文件夹里包含有下载的软件包,Libraries文件夹包含有库文件,ModuleDemo文件夹包含各个模块的例程。
2.2安装软件包
双击AIR_Jlink_Keil\Keil.AIR32F103_DFP.1.0.4.pack即可安装软件包。
2.3打开GPIO例程
打开GPIO例程工程:ModuleDemo\GPIO\GPIO_IOOut\USER\GPIO.uvprojx
2.4连接下载器
由于此开发板自带DAPLink固件,所以用2块开发板进行调试。一个当开发板,一个当DAPLink。
连线如下:
2.5下载程序
下载前,先将Debug中的下载器型号选则为CMSIS-DAP Debugger。
由于Air32F103开发板内置了DAPLink固件,第一次下载时需要按住复位键后再点击下载。官方Wiki详细说明:
如果下载顺利,按下复位键后,板上3个LED开始流水灯闪烁,说明下载成功了,至此完成了开发环境和程序下载接线的调试。
(关于下载程序的详细说明,在官方Wiki里面有更详细的介绍)
三、封装工程
由于官方的工程示例不太适合扩展,使用正点原子的风格新建工程。
3.1封装led底层文件
新建一个led.c和led.h。封装如下函数:
led.c
#include "led.h"
void LED_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出模式
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB.2,10,11
}
void LED_Set(u8 led)
{
if(led&0x01)LEDR_ON;else LEDR_OFF;
if(led&0x02)LEDG_ON;else LEDG_OFF;
if(led&0x04)LEDB_ON;else LEDB_OFF;
}
|
leh.h
#ifndef __LED_H__
#define __LED_H__
#include "air32f10x.h"
#include "sys.h"
#define LEDR PBout(11)
#define LEDG PBout(10)
#define LEDB PBout(2)
#define LEDR_ON (LEDR=1)
#define LEDG_ON (LEDG=1)
#define LEDB_ON (LEDB=1)
#define LEDR_OFF (LEDR=0)
#define LEDG_OFF (LEDG=0)
#define LEDB_OFF (LEDB=0)
#define LEDR_TOGGLE (LEDR=~LEDR)
#define LEDG_TOGGLE (LEDG=~LEDG)
#define LEDB_TOGGLE (LEDB=~LEDB)
void LED_GPIO_Init(void);
void LED_Set(u8 led);
#endif
|
3.2使用
在main函数中只需要先进行LED_GPIO的初始化后,再进行LED控制即可。
main.c
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "delay.h"
#include "led.h"
int main(void)
{
RCC_ClocksTypeDef clocks;
delay_init(); //延时初始化
RCC_GetClocksFreq(&clocks); //获取系统时钟频率
LED_GPIO_Init();
while (1)
{
LEDR_TOGGLE;
delay_ms(200);//延时200ms
LEDG_TOGGLE;
delay_ms(200);//延时200ms
LEDB_TOGGLE;
delay_ms(200);//延时200ms
}
}
|
3.3工程结构
工程结构与正点原子的工程类似,但不完全一样,方便自己使用分类即可。
到此,编译,下载工程,和官方例程一样,看到LED闪烁即可。