由于最近工作较忙,项目进度也比较赶,所以未能及时更新公众号。以后我会及时更新一些开发技巧,以及一些优秀的工具及软件推送。
我最近在一个项目上用的是AT32系列的MCU,为国内的芯片软件,为重庆雅特力研发制造。该MCU相对于STM32来说,价格相对来说较低,功能相对来说,可以满足一些程序量不是特别大,但是功能相对来说,较为丰富的产品上。
官方网站有相对应的资料。官方网站为:http://www.arterytek.com/index.jsp。官网未提供对应的BSP代码,具体可从百度网盘上下载:
https://pan.baidu.com/s/1BQQz91QhJcyPF-mLMIsPJw
password: t3io。
接下来,我将从基本外设谈起,分多个文章,来说一些在应用过程中的一些经验,想法等等。
本章节先说GPIO,相对来说基本的GPIO来说,配置比较简单。但是32位机同51单片机不一样,IO有多种模式。
每个MCU均有引脚图,AT32的也不例外。如下图所示:
此为引脚图,另外下面还有对应的表格,由于比较庞大,因此只截取一部分。
一、引脚控制逻辑代码
同STM32类似,相对引脚有多种状态,具体引脚状态如下所示:
先宏定义引脚的信息,便于修改:
//充电中 #define PIN_BAT_CHARGING GPIO_Pins_13#define PORT_BAT_CHARGING GPIOC#define RCC_BAT_CHARGING RCC_APB2PERIPH_GPIOC
然后为引脚的配置 ,如下所示。结构体配置如下:
GPIO_InitType GPIO_InitStructure; //充电中 IO RCC_APB2PeriphClockCmd(RCC_BAT_CHARGING, ENABLE); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pins = PIN_BAT_CHARGING; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_2MHz; //IO电平翻转 GPIO_Init(PORT_BAT_CHARGING, &GPIO_InitStructure);
基本在初始化中调用该函数,即可实现IO的初始化。
二、IO功能复用
如果需要用到除普通IO之外的功能,或者重映射,则需要配置为其它功能。如下所示,JTAG中一些脚,配置成了普通IO口
GPIO_PinsRemapConfig(AFIO_MAP7_SWJTAG_0010,ENABLE);
三、IO其它注意事项
1、JTAG默认为使能的,如果配置成普通IO,需要先关闭JTAG功能。也可以只关JTAG,保留SWD功能,此种功能比较常用一些。
具体寄存器配置如下:
2、PC14 PC15引脚使用
PC14、PC15默认不是用作普通IO口的,使用时应注意。
具体代码如下,需要在初始化中调用。
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB | RCC_APB2PERIPH_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR, ENABLE); //只使能JTAG,失能SWD GPIO_PinsRemapConfig(AFIO_MAP7_SWJTAG_0010,ENABLE); MCUDBG->IDCR &= ~((uint32_t)(1 <5)); //PC13 PC14 PC15用作普通IO口 PWR_BackupAccessCtrl(ENABLE); /* 允许修改RTC和后备寄存器*/ RCC_ERTCCLKCmd(DISABLE); RCC_LSEConfig(RCC_LSE_DISABLE); /* 关闭外部低速时钟,PC14+PC15可以用作普通IO*/ PWR_BackupAccessCtrl(DISABLE); /* 禁止修改RTC和后备寄存器*/