一、简介

合宙Air32F103开发板板载Air32F103CBT6,兼容STM32F103C8T6,价格太香了,首发9.9包邮。自带DAPLink固件,可以直接当DAPLink使用。

合宙 esp32 c3 i2c_合宙

官方详细介绍(含资料):Air32F103 Wiki,开发板开发板PinOUT图:

合宙 esp32 c3 i2c_合宙_02

 将在本栏目简单介绍使用基于此开发板的调试,以调试阿里云为导向,完成各部分的调试,预计要更新的内容包括:GPIO、USART、LCD、KEY、DHT11、阿里云。

所有的程序将重新移植官方例程,并且重写工程,参考正点原子的风格建立工程目录。

二、调试例程

使用官方例程,可以快速验证开发环境、下载方式等问题。

2.1下载例程

在Air32F103Gitee上面下载使用官方SDK例程。

合宙 esp32 c3 i2c_开发环境_03

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

合宙 esp32 c3 i2c_合宙 esp32 c3 i2c_04

2.4连接下载器

由于此开发板自带DAPLink固件,所以用2块开发板进行调试。一个当开发板,一个当DAPLink。

连线如下:

合宙 esp32 c3 i2c_Air32F103_05

2.5下载程序

下载前,先将Debug中的下载器型号选则为CMSIS-DAP Debugger。

合宙 esp32 c3 i2c_合宙 esp32 c3 i2c_06

由于Air32F103开发板内置了DAPLink固件,第一次下载时需要按住复位键后再点击下载。官方Wiki详细说明:

合宙 esp32 c3 i2c_合宙_07

如果下载顺利,按下复位键后,板上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工程结构

合宙 esp32 c3 i2c_合宙_08

 工程结构与正点原子的工程类似,但不完全一样,方便自己使用分类即可。

到此,编译,下载工程,和官方例程一样,看到LED闪烁即可。