本帖最后由 peterLaw 于 2022-2-23 17:35 编辑
对于芯片来说,其实经常用到的就是IO口了,其实其所有功能的实现都是通过IO口的复用实现的,那么今天咱们就简单对IO口控制流水灯进行讲解分析。[size=14.6667px]对于咱们主板,首[size=14.6667px]先就[size=14.6667px]是看看LED灯在哪个引脚上控制,是高电平还是低电平触发,这些都可以从原理图上查到,如图:
[size=14.6667px]可以清楚的知道,3个PED灯分别与PA7、PA25、PA4三个引脚相连,而且通过LED_RGB知道分别有三种颜色而且为低电平触发(因为共3.3V高电平)。 [size=14.6667px]下面在程序中我们只需要将对应的IO口置成0,即低电平即可。 [size=14.6667px]下面下载流水灯DEMO样例程序,并打开。 [size=14.6667px]
[size=14.6667px]
[size=14.6667px]下面咱们对这个样例程序进行分析:
[size=14.6667px]这个程序是基于GUI函数那个程序上实现的,关于画面程序前期咱们简单介绍过(第一张图片就是设置一个demo_task调用所有的任务和gui画面程序),不再赘述, [size=14.6667px]在main.c中定义了csi_gpio_pin_t 变量,这个变量其实就是引脚的别名,分别对应三个引脚,方便清晰,然后定义void led_pinmux_init()LED初始化函数和void led_refresh()LED灯循环函数。 [size=14.6667px]在初始化函数中先用csi_pin_set_mux()函数定义引脚功能作为GPIO使用,函数说明和形参定义如图: [size=14.6667px]这个对pin_name_t和pin_func_t所用引脚以及功能复用的枚举列表,后期若作为其他用途也得先将其相应引脚和功能定义好,才可以实现其功能。 [size=14.6667px]这个csi_gpio_pin_init()函数其实就是初始引脚别名,csi_gpio_pin_dir()这个函数就是定义引脚是输入还是输出的,咱们控制LED灯作为输出使用。 [size=14.6667px]初始化完成之后,就是LED灯控制函数void led_refresh(),这个函数就是利用控制数值g_ctr++进行判断选择控制引脚输出高低电平,从而控制不同引脚亮灭。 [size=14.6667px]对于本函数需要注意的细节是在里面有#ifdef和#endif,这个定义,若想启用这个之间的函数必须先#define 控制的命令。 [size=14.6667px]由于视频无法上传,传流水照片如下:
|