今天,有点时间研究了下库,AC7811的库是在安装PACK时装进MDK的。且比较特别同STM32不一样。
比如说这个库函数:
int32_t GPIO_SetDir(uint32_t gpioNum, uint32_t pinMode)
{
uint32_t tmpGPIOx = 0, tmpGPIOxPinNum = 0;
tmpGPIOx = gpioNum / GPIO_ONE_GROUP_NUM; // Calculate GPIO Group(A~E)
tmpGPIOxPinNum = gpioNum % GPIO_ONE_GROUP_NUM; // Calculate GPIO Group's Internal Pin Number(0~15)
switch (tmpGPIOx)
{
case 0:
GPIO_SetGPIOxMODE(GPIOA, tmpGPIOxPinNum, pinMode);
break;
case 1:
GPIO_SetGPIOxMODE(GPIOB, tmpGPIOxPinNum, pinMode);
break;
case 2:
GPIO_SetGPIOxMODE(GPIOC, tmpGPIOxPinNum, pinMode);
break;
case 3:
GPIO_SetGPIOxMODE(GPIOD, tmpGPIOxPinNum, pinMode);
break;
case 4:
GPIO_SetGPIOxMODE(GPIOE, tmpGPIOxPinNum, pinMode);
break;
default:
return -1;
}
return 0;
}
它是把所有的管脚都罗列在一起然后再分。我认为这是比ST的库要进步。
还有一点是,不用给管脚外设特意加时钟。比如我的点灯程序如下:
int main(void)
{
InitDelay();
InitDebug();
GPIO_SetDir(MY_LED_PIN, GPIO_OUTPUT);//设置LED引脚为输出
do
{
MY_LED = 0;
mdelay(1000);
MY_LED = 1;
mdelay(1000);
}while(1);
而管脚定义是在GPIO.h中
#define MY_LED (GPIOC_OUT(5))//定义MY_LED引脚别名
#define MY_LED_ON MY_LED =1
#define MY_LED_OFF MY_LED =0
#define MY_LED_TOGGLE MY_LED = !MY_LED
我只是定义了管脚是输出并没有给时钟使能,但好用:
GPIO_SetDir(MY_LED_PIN, GPIO_OUTPUT);//设置LED引脚为输出
以下是截图:
|