[应用方案] 【NuMaker-M471测评】 GPIO口的使用

[复制链接]
3108|4
 楼主| jinglixixi 发表于 2021-7-29 11:35 | 显示全部楼层 |阅读模式
可能是有段时间没有接触新唐的新品之故吧,在例程中居然没有找到以往常见的闪灯程序,它可是打开GPIO口使用之门的呀!
没办法只能自行编一个看了,为了能快速入手,可在例程Template的基础上来进行。
由于要用到GPIO口,故要在Library目录下添加文件gpio.c。
此外,从开发板的原理图可知,LEDR1的引脚连接为PB14,且一端接到VDD,见图1所示。
                              
1.jpg
图1 LED电路
为此,要点亮LEDR1只需令其输出低电平接口,相应的程序如下:
int main(void)
{
   SYS_Init();
         GPIO_SetMode(PB,BIT14, GPIO_MODE_OUTPUT);
    PB14= 0;
   while(1);
}
经编译下载,其运行效果如图2所示。
2.jpg
图2 运行效果
要实现闪灯效果,延时函数是必不可少的,但寻遍各处也没找到类似Delay ms()或Delayus()之类的函数,无奈只好先将其放下,再测试一下按键的用法。
板载按键的电路如图3所示,其连接的引脚为PH4,由此可知当按键按下时,它将输出低电平,否则一直处于高电平状态。
3.jpg
图3 按键电路
实现按键测试的思路是当按键按下时点亮LED,否则将熄灭LED,其程序如下:
  1. int main(void)
  2. {
  3. SYS_Init();
  4. GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
  5. GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);
  6. PB14 = 1;
  7. while(1)
  8. {
  9. if(PH4==0)  PB14 = 0;
  10. else
  11. {
  12. PB14 = 1;
  13. }
  14. }
  15. }

经程序编译下载,证明该用法正确。
要编写闪灯程序,该如何获取延时函数呢?
我们可以使用计时器来获得,当然这要在Library目录下再添加一个文件timer.c,所用的函数则为TIMER_Delay()。
相应的闪灯程序为:
  1. int main(void)
  2. {
  3. SYS_Init();
  4. GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
  5. GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);
  6. PB14 = 1;
  7. while(1)
  8. {
  9. PB14 = 0;
  10. TIMER_Delay(TIMER0, 1000000);
  11. PB14 = 1;
  12. TIMER_Delay(TIMER0, 1000000);
  13. }
  14. }

至此,我们就完全地回到了以往的开发起点。
有了前面的基础,下面再来测试一下Arduino接口的用法。
1.蜂鸣器的测试
蜂鸣器有2种,一种是有源蜂鸣器,另一种是无源蜂鸣器,其中有源蜂鸣器加电即可发出声响;而无源蜂鸣器相应外加脉冲信号来工作。
测试中,蜂鸣器所连接的引脚为PA2,见图4和图5所示。
4.jpg
图4 有源蜂鸣器连接
有源蜂鸣器的测试程序为:
  1. int main(void)
  2. {
  3. SYS_Init();
  4. GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
  5. GPIO_SetMode(PA, BIT2, GPIO_MODE_OUTPUT);
  6. GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);
  7. PB14 = 1;
  8. while(1)
  9. {
  10. if(PH4==0)  
  11. {
  12. PB14 = 0;
  13. PA2= 0;
  14. }
  15. else
  16. {
  17. PB14 = 1;
  18. PA2= 1;
  19. }
  20. }
  21. }

5.jpg
图5 有源蜂鸣器连接
无源蜂鸣器的测试程序为:
  1. int main(void)
  2. {
  3. SYS_Init();
  4. GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
  5. GPIO_SetMode(PA, BIT2, GPIO_MODE_OUTPUT);
  6. GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);
  7. PB14 = 1;
  8. while(1)
  9. {
  10.              PB14 = 0;
  11. PA2= 0;
  12. TIMER_Delay(TIMER0, 500000);
  13. PB14 = 1;
  14. TIMER_Delay(TIMER0, 500000);
  15. PA2= 1;
  16. }
  17. }

经编译下载,证明此使用方法正确。
2.风扇模块的测试
风扇模块是一种自带驱动的模块,该模块所连接的引脚为PA2,见图6所示。
6.jpg
图6 风扇模块电路连接
风扇模块的测试程序与蜂鸣器的测试程序相同,这里从略。
经编译下载,证明此使用方法正确。
因此可知,在改变延时超短的情况下,可达到调节风扇转速的作用。
tail066 发表于 2021-8-13 15:31 | 显示全部楼层
你这手里的小模块可是真不少
 楼主| jinglixixi 发表于 2021-8-13 19:56 | 显示全部楼层
哈哈,积累的时间久点就丰富了。
huahuagg 发表于 2023-9-27 19:55 | 显示全部楼层
板子上好像没多余的东西。
yiy 发表于 2023-9-28 11:26 | 显示全部楼层
轻松点灯。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部