【上海航芯 ACM32F070开发板+触控功能评估板测评】+GPIO口的使用
[复制链接]
本帖最后由 jinglixixi 于 2022-10-3 01:31 编辑
对GPIO口的学习是掌握开发板使用的最好入口,通过例程的分析和学习则是快速上手的途径。
1)输出模式的使用
在ACM32F070开发板上配有一个绿色的LED,可供输出测试之用,其电路如图1所示。
图1 LED电路
有图可知,该LED的控制引脚为PD3。为此,可对该引脚用如下函数来配置。
void GPIO_Test(void)
{
GPIOD_Handle.Pin = GPIO_PIN_3;
GPIOD_Handle.Mode = GPIO_MODE_OUTPUT_PP;
GPIOD_Handle.Pull = GPIO_PULLUP;
GPIOD_Handle.Alternate = GPIO_FUNCTION_0;
HAL_GPIO_Init(GPIOD, &GPIOD_Handle);
}
为控制该LED进行闪烁,其主程序如下:
int main(void)
{
System_Init();
APP_GPIO_Test(GPIO_INT);
while (1)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET);
System_Delay_MS(500);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_CLEAR);
System_Delay_MS(500);
}
}
经程序的编译下载,就可见到LED的所示效果。
2)输入模式的使用
在ACM32F070开发板上配有一个黑色的按键,可供测试之用,其电路如图2所示。
图2 按键电路
有图可知,该按键的控制引脚为PC13。为此,可用例程进行基于中断方式测试。
此时,需将主程序改为如下形式:
int main(void)
{
System_Init();
Uart_Init(115200);
APP_GPIO_Test(GPIO_PC13);
while(1);
}
经下载测试,其串口的输出信息如图3所示。
由程序分析,在按下用户键时,应有“Get PC13 interrupt flag!!!”的信息提示,但并没有见到该提示内容。
据相关资料介绍说,引脚PC13、PC14、PC15的用法比较特殊。
图3 按键测试
若需将主程序改为如下形式:
int main(void)
{
System_Init();
Uart_Init(115200);
APP_GPIO_Test(GPIO_INT);
while(1);
}
倒是在PA0被接地时,能见到图4所示的变化。
图4 PA0触发变化
那么能否用按键来进行 LED的控制呢?
当然是可以,但需要外挂一个按键模块,其控制效果如图5和图6所示。
图5 未按键状态
图6 按键状态
相应的引脚配置函数为:
void GPIO_Test(void)
{
GPIOD_Handle.Pin = GPIO_PIN_3;
GPIOD_Handle.Mode = GPIO_MODE_OUTPUT_PP;
GPIOD_Handle.Pull = GPIO_PULLUP;
GPIOD_Handle.Alternate = GPIO_FUNCTION_0;
HAL_GPIO_Init(GPIOD, &GPIOD_Handle);
GPIOC_Handle.Pin = GPIO_PIN_0;
GPIOC_Handle.Mode = GPIO_MODE_INPUT;
GPIOD_Handle.Pull = GPIO_ GPIO_PULLUP;
GPIOC_Handle.Alternate = GPIO_FUNCTION_0;
HAL_GPIO_Init(GPIOA, &GPIOA_Handle);
}
实现控制功能的主程序为:
int main(void)
{
System_Init();
GPIO_Test();
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)==RESET)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_CLEAR);
}
else
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET);
}
System_Delay_MS(200);
}
}
3)蜂鸣器控制
在ACM32F070开发板上配有一个蜂鸣器,其电路如图7所示。
图7 蜂鸣器电路
该蜂鸣器的控制引脚为PD1,其引脚的配置语句如下:
GPIOD_Handle.Pin = GPIO_PIN_1;
GPIOD_Handle.Mode = GPIO_MODE_OUTPUT_PP;
GPIOD_Handle.Pull = GPIO_PULLUP;
GPIOD_Handle.Alternate = GPIO_FUNCTION_0;
HAL_GPIO_Init(GPIOD, &GPIOD_Handle);
以按键控制蜂鸣器的主程序为:
int main(void)
{
System_Init();
GPIO_Test();
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)==RESET)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_CLEAR);
}
else
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_SET);
}
System_Delay_MS(200);
}
}
有了GPIO口的使用基础,后面就可以用GPIO口来模拟I2C驱动OLED或相应传感器了。
|