目的
参考官方DDL外设示例代码,重新进行组织构建,过程中熟悉hc32l196的代码结构,调用关系。
主要分为以下几部分:
- 0001-gpio_output:使用IAR重新组织GPIO OUT代码;熟悉IAR使用,熟悉工程文件设置,了解代码导入工具
- 0002-hc32l19x_ddl:修改库文件名;熟悉hc32l196库文件调用关系
- 0003-uart_int:引入串口文件,调用库文件完成串口的字符输入输出;熟悉串口的代码和使用
- 0004-bsp:引入bsp概念,将外设的初始化统一归口到bsp文件
- 0005-printf:完成printf的串口重定向
0001-gpio_output
1. 复制 HC32L196 裸机源码
使用 gpio_output
例程文件。
HC32L19x_DDL_Rev1.2.0\example\gpio\gpio_output\source
HC32L19x_DDL_Rev1.2.0\driver
HC32L19x_DDL_Rev1.2.0\mcu\common
参考官方例程,建立文件夹
│ 0001-gpio_output
├─Common
├─Driver
├─Project
│ │ HC32L96.ewd
│ │ HC32L96.ewp
│ └─HC32L96.eww
└─User
ddl_device.h
main.c
其他文件都是源代码直接复制,Project是自己创建的文件夹
2. 通过 IAR 建立工程
使用 IAR 的 ewp
项目文件和 eww
工程文件,通过工具进行导入。
3. 开始编译并解决问题
- 在 IAR 中,依次进行以下设置:
- 选择
Options/General Options/Target/Device/HC32L19x
(在 XHSC 中)。 - 在
Options/General Options/Library Configuration
中,将 Library 等级改为 Full,并在 CMSIS (legacy) 中勾选Use CMSIS 5.7
。
- 选择
- 以上操作后,无编译错误。
0002-hc32l19x_ddl
官方自带的库中,外设库函数均以 adc.h
类似形式命名,为表示区分,统一增加hc32l19x_
前缀,变成hc32l19x_adc
的样式
1. 使用工具批量重命名
使用菲菲改名助手批量修改文件名
2. 更改文件内的引用名
使用vscode依次更改引用名
3. 编译
根据提示报错依次修改直至不再报错
0003-uart_int
GPIO外,串口也是一个重要的调试外设,将示例代码中串口发送部分引入,注意,示例代码是取反返回的。
一般来说,调试串口默认115200无校验,现在先以默认的9600偶校验执行
0004-bsp
设备驱动层也叫板级支持包 (Board Support Package,BSP),它包含了嵌入式系统中所有与硬件相关的代码.BSP的基本思想是把嵌入式操作系统与具体的硬件平台隔离开来也就是说,在BSP当中,把所有与硬件相关的代码都封装起来,并向上提供一个虚拟的硬件平台,而操作系统就运行在这个虚拟的硬件平台上。它使用一组定义好的编程接口来与BSP进行交互,并通过BSP来访问真正的硬件。BSP在嵌入式系统中的角色,类似于PC系统中的BIOS和驱动程序。
初步仅完成初始化程序
0005-printf
完成hc32l196的printf的串口重定向 ,printf的底层调用putchar,重写putchar即可
int putchar(int c)
{
while(!M0P_UART1->ISR_f.TXE); //检查发送缓存是否为空
return (M0P_UART1->SBUF = c); //UARTx_SBUF 写入下一个发送数据
}
当然,成功使用的前提是做好了串口相关的配置
至此,HC32L196完成了GPIO和串口的初步配置,后续还计划将RT-Thread Nano引入。