《鸿蒙开发板外设控制》直播图文版(2020.10.28) 原创 精华

唐佐林
发布于 2020-10-29 13:14
浏览
13收藏

直播回放:https://edu.51cto.com/course/25683.html

 

直播主题:

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

直播实验设备 Hi3861核心板 + 交通灯外设板 + 底板,如下图:

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

 

1. Hello World(如果不想迈出第一步时就踩坑,请严格遵守步骤)

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

 

解说:

1) 对于初学者来说,SYS_RUN(HelloWorld);  可理解为一个“注册语句”,将 HelloWorld() 注册为一个板载应用程序的入口函数,即,我们所写的应用程序中第一个被调用的函数。

2) BUILD.gn 编译脚本是应用程序被编译的关键,必须仔细编写和修改

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

 

这里值得大家思考问题如下:

1) 为什么任务入口函数不是 C 语言中的 main() ?(反思:C 语言中的入口函数必须是 main() 吗?)

2) SYS_RUN(HelloWorld);  这行语句是什么?(函数调用?函数调用语句能位于全局作用域中?)

 

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

解说:

在鸿蒙设备开发中,应用程序入口函数并不等价于传统 C 语言中的 main() 函数,不能随意的 while(1); 或者做一些耗时的操作,必须快速的返回,否则会妨碍其它应用程序的运行;因此,在入口函数中创建专用的任务(线程)是一种“标准”操作。

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

 

 2. 点灯操作(外设控制的经典操作模式)

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

 解说:

1)GPIO (General Purpose Input/Output) 是核心板对外设的物理接口(可理解为计算机上的 USB 口,用于插入设备,扩展功能)

2)操作 GPIO 几乎贯穿整个外设控制的全部,所以,搞清楚外设所接入的 GPIO 引脚成为了关键

 

3.  按键编程(外设板上的物理按钮可看作一种 GPIO 设备)

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区解说:

1. 按键编程中需要设置回调函数,并且回调函数是在中断上下文中被调用,因此,回调函数不能做耗时操作(中断编程基本原则)

2. 如果回调函数需要改变某个全局变量,那么,对应的全局变量需要使用 volatile 关键字修饰(详见《C语言进阶剖析教程》)

 

5. 蜂鸣器控制

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

《鸿蒙开发板外设控制》直播图文版(2020.10.28)-鸿蒙开发者社区

解说:

1) PwmInit(), PwmStart(), PwmStop() 都属于“耗时”操作,因此不能在中断回调函数中调用,必须放到任务执行函数中调用

2) 中断回调函数可理解为 Linux 中的中断上半部(快速执行并返回),任务执行函数为中断下半部(执行具体的数据处理操作)

 

预告:

按键编程时每次只能注册执行一个回调函数,即:要么下降沿触发回调,要么上升沿触发回调;因此,要捕捉按键“按下事件”和按键”释放事件"就需要另外想办法了,下一篇帖子会讨论这个方法,大家多多关注哦。

 

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
鸿蒙开发板外设控制-唐佐林.pdf 1.16M 357次下载
hello_world.zip 1.86K 210次下载
Hi3861V100/Hi3861LV100 设备驱动 开发指.pdf 337.38K 434次下载
已于2020-12-16 16:31:13修改
13
收藏 13
回复
举报
17条回复
按时间正序
/
按时间倒序
啧啧啧GKD
啧啧啧GKD

感谢分享!收藏了!

回复
2020-10-29 13:36:59
wg_caddBjEB
wg_caddBjEB

老师昨天的直播我去看啦!今天就出了图文版真是好迅速👍

回复
2020-10-29 13:49:35
红叶亦知秋
红叶亦知秋

昨天的直播很精彩,图文版出的这么迅速是我没想到的。

回复
2020-10-29 13:54:24
weflying123
weflying123

直播相当好 就是清晰度再高点就好了

回复
2020-10-29 14:09:47
gordonlonglong
gordonlonglong

精彩,支持大佬!!!!

回复
2020-10-29 14:10:40
唐佐林
唐佐林 回复了 weflying123
直播相当好 就是清晰度再高点就好了

谢谢你的建议,第一次在51CTO直播,所以经验不足哈,下次一定注意这个问题。

回复
2020-10-29 14:11:00
唐佐林
唐佐林 回复了 gordonlonglong
精彩,支持大佬!!!!

我只是一名小工程师,多多交流。。。

回复
2020-10-29 14:13:25
鲜橙加冰
鲜橙加冰

唐老师效率很高。。。。。。。。

回复
2020-10-29 14:22:55
FFKJ_Net
FFKJ_Net

唐老师,您的代码我直接使用好像编译失败呀,我直接复制进去的,感觉好像是调用蜂鸣器出的问题,大家有成功的吗?屏蔽调用蜂鸣器的代码就可以通过

回复
2020-10-29 18:38:10
FFKJ_Net
FFKJ_Net 回复了 FFKJ_Net
唐老师,您的代码我直接使用好像编译失败呀,我直接复制进去的,感觉好像是调用蜂鸣器出的问题,大家有成功的吗?屏蔽调用蜂鸣器的代码就可以通过

明白了,学习不认真呀

回复
2020-10-29 21:59:40
唐佐林
唐佐林 回复了 FFKJ_Net
唐老师,您的代码我直接使用好像编译失败呀,我直接复制进去的,感觉好像是调用蜂鸣器出的问题,大家有成功的吗?屏蔽调用蜂鸣器的代码就可以通过

编译过程中报错:undefined reference to hi_pwm_init 等几个 hi_pwm_开头的函数,原因: 因为默认情况下,hi3861_sdk中,PWM的CONFIG选项没有打开
解决: 修改vendor\hisi\hi3861\hi3861\build\config\usr_config.mk文件中的CONFIG_PWM_SUPPORT行:# CONFIG_PWM_SUPPORT is not set修改为CONFIG_PWM_SUPPORT=y

1
回复
2020-10-29 23:06:08
hcl0317
hcl0317

感谢唐老师,照着把所有的流程走了一遍,

1
回复
2020-11-6 23:51:14
temjin
temjin

请教个问题,当GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0)后,用电表测GPIO10的电压,发现相对GND依然是有一定的电压。请问有什么方法能是GPIO10不输出电压呢?

这问题起因是尝试使用gpio10去连接另外一个设备的io口,但发现无论在GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1) 还是GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0)之后,该设备的io依然是使能状态。

回复
2021-4-14 08:25:11
唐佐林
唐佐林 回复了 temjin
请教个问题,当GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0)后,用电表测GPIO10的电压,发现相对GND依然是有一定的电压。请问有什么方法能是GPIO10不输出电压呢? 这问题起因是尝试使用gpio10去连接另外一个设备的io口,但发现无论在GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1) 还是GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0)之后,该设备的io依然是使能状态。

你有没有测量GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1)之后GPIO10的输出电压是多少?

回复
2021-4-14 09:38:51
temjin
temjin 回复了 唐佐林
你有没有测量GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1)之后GPIO10的输出电压是多少?

大概3.5V左右 ,GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0)后大概0.5V左右。

因为这样遇到的问题是,受控的设备仍然认为主控端给使能信号了。

已于2021-4-14 10:21:57修改
回复
2021-4-14 10:20:41
唐佐林
唐佐林 回复了 temjin
大概3.5V左右 ,GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0)后大概0.5V左右。 因为这样遇到的问题是,受控的设备仍然认为主控端给使能信号了。

这种情况其实很正常,3.5v表示1,0.5v表示0。

如果你需要标准0v作为控制信号,那么加一个电压比较器即可。

回复
2021-4-14 16:05:01
temjin
temjin 回复了 唐佐林
这种情况其实很正常,3.5v表示1,0.5v表示0。 如果你需要标准0v作为控制信号,那么加一个电压比较器即可。

发现问题,原来是受控端io有电流回流造成的。加了一个二极管就解决了。不接的时候是0V的

回复
2021-4-15 11:37:16
回复
    相关推荐