【HC32F448测评】+ Hello World!!!
[复制链接]
本帖最后由 dmzdmz666666 于 2023-8-4 21:53 编辑
第二篇:Hello World!!!@dmz 23.08.04
这篇主要介绍工程的创建和MCU的串口、按键和LED的使用。
首先作为一个个人开发者来说,选择微控制器这里混合信号IC还是模拟IC、数字IC,主要就关注硬实力还有软实力下。硬实力主要就是看芯片本身的性能,是不是足够好,是不是足够适合;另一方面软实力就包括生态,良好的生态就是让开发者开发起来事半功倍,不用反复踩别人踩过的坑了,像数据手册、用户手册、勘误表、各部分的使用注意事项、例程、SDK、驱动库应该是完整且易获得的,国产厂家的微控制器在硬实力上这些年慢慢向中高端走,性能越来越好,产品线越来越丰富,但距离国际大厂像意法半导体、恩智浦半导体、瑞萨半导体还有差距;在软实力上,一个典型的例子就是意法半导体的STM32系列,它本土化方面做的就很好,最常见的STM32F103系列中文资料一堆,很多英文资料官方都提供了中文版,同时跟国内的做开发板厂家,比如正点原子、野火科技、安富莱电子等合作,推出了很多本土化的教程,大大降低了普通个人开发者的使用门槛和开发难度,同时网络上资料非常多,各类的评估版、系统板也非常多,所以至少在中国,STM32的影响力还是非常大的;国产的微控制器在本土化上应该是有优势的,但是奇怪的是,有些MCU的半导体厂家要么资料还是英文的(搞不懂你国际化没问题,那也应该立足本土化,放眼国际化呀,可以中文英文都搞一个呀),要么资料就不全、要么资料还需要注册或者留言才能有机会看到,要么就干脆不给,搞起来神神秘秘的,说就是面向大客户或者公司,还要签订什么协议。
这方面小华半导体、雅特力科技啊就做的都很不错,它们的数据手册、用户手册、开发工具的使用手册均是原生中文的,而且提供全套的例程和SDK、驱动库、还有开发板对应的BSP,对我给人而言,手册看起来特别舒服直观,不需要翻译,程序写起来也很容易。而且之资料摆放的位置也很好找,可以很方便的下载。芯片在淘宝上也很容易买到,对于个人开发者来说,这几点直接让我无脑支持。
说回正事,这次的程序需要用到串口、LED和按键。需要用到的例程在HC32F448_DDL_Rev1.0.0\HC32F448_DDL_Rev1.0.0\projects\ev_hc32f448_lqfp80\examples\usart\usart_uart_int,
但是我们要将这个usart_uart_int单独拎出来是无法编译通过的,因为里面缺少组件,就像下面这样
所以我们单独拎出来后,要将HC32F448_DDL_Rev1.0.0\HC32F448_DDL_Rev1.0.0\drivers这个里面的drivers复制到新文件夹里面,并新建一个子文件夹HARDWARE存放自己自定义的组件,如下图
进入工程以后记得点击下面两个图标并且修改对应drivers路径,这里我就不在赘述了。
例程usart_uart_int是RX和TX都是中断。这里我要修改为RX为中断,TX用printf实现。这里选择的串口是USART 2,因为自带的DAP电路支持虚拟串口,而它所连接的正是USART 2,正好方便调试。
我将USART相关的函数都放在了HARDWARE文件夹里的USART里,这样比较清晰。
首先是MY_USART_Init(void),这里是为了防止跟驱动库里的函数命名重复,才命名成MY_USART_Init,初始化的流程跟例程中的一致,就是配置GPIO、使能对应时钟、USART参数配置、使能RX TX的功能,如下图。
然后RX功能是通过中断实现的,配置如下图所示,包括一个ERROR中断和FULL中断,还有对应的回调函数。然后在FULL中断里面,我们设置将收到的数据重新发出去。
TX则通过主动发送,通过USART_GetStatus检测到USART的TX状态为空时,再将待发送的数据通过USART_WriteData写入USART,此时USART会将数据发送出去。同时,通过重定向fputc函数,printf就可以正常使用了。记得要加这个"stdio.h"头文件
其次是LED和按键,但其实官方的SDK已经给你弄好了的,就在ev_hc32f448_lqfp80这个子文件夹里。
首先是ev_hc32f448_lqfp80_tca9539.c这个C文件里包含LED0-LED2的初始化,因为这3个LED的IO是通过TCA9539芯片扩展的,然后用BSP_LED_Init();初始化;
ev_hc32f448_lqfp80.c这个C文件包含了按键KEY的初始化,用BSP_KEY_Init();初始化,然后通过BSP_KEY_GetStatus(BSP_KEY_1)来判断是否按下,按下状态则为SET。
因为LED3是单片机通过PA2直接控制的,所以这就涉及到了对GPIO口的初始化,设置为输出
最后对各模块进行初始化,这里我参照例程。
最后的效果是按下对应的按键,对应的LED会翻转,同时USART会发送"Hello World!!!@DMZ This is KEY_1
看最后效果,测试成功。
|