
本书基于GD32E2杏仁派开发板(主控芯片为GD32E230C8T6),通过14个实验介绍GD32E230C8T6微控制器的GPIO、串口、定时器、SysTick、RCU、外部中断、OLED显示、DAC和ADC等的原理和应用。作为拓展,本书配套资料包中另有6个实验分别介绍MCU调试、RTC、FWDGT、WWDGT,以及基于I2C的EEPROM读/写和基于SPI的Flash读/写。全书程序代码的编写规范均遵循《C语言软件设计规范(LY-STD001—2019)》。各实验采用模块化设计,以便于将各模块应用在实际项目和产品中。本书配有丰富的资料包,涵盖GD32E2杏仁派开发板原理图、例程、软件包、PPT等,资料包将持续更新,下载链接可通过微信公众号“卓越工程师培养系列”获取。本书既可以作为高等院校电子信息、自动化等专业微控制器相关课程的教材,也可以作为微控制器系统设计及相关行业工程技术人员的入门培训用书。
本书是一本介绍微控制器程序开发的书,对应的硬件平台为GD32E2杏仁派开发板,这款开发板的主控芯片为国产的GD32E230C8T6,由兆易创新科技集团股份有限公司(以下简称“兆易创新”)研发并推出。GD32E230C8T6属于GD32E230xx系列,因此,本书将介绍基于GD32E230xx系列微控制器的程序开发流程和方法,并在程序设计之前,详细介绍Keil开发工具的安装和配置过程。最后通过一系列实验,由浅入深地介绍GD32E230xx系列微控制器的系统架构、外设结构和开发过程。 近年来,围绕缺芯的话题热度持续高涨,而微控制器正是缺货最严重的品类之一。在国内外微控制器厂商大幅调整售价的情况下,不少厂商将目光转向了性价比更高的国产品牌。在国产化进程的推动下,国内微控制器产品将不断得到验证,市场占比也会提升。其中,兆易创新的GD32微控制器在我国高性能通用微控制器领域中占据重要地位,为我国32位通用微控制器市场的热门之选。相较于国际厂商,兆易创新的32位微控制器主频更高,内存更大,外设更丰富,适应国内的应用需求,能较好地实现国产替代。虽然国产替代是趋势,但相比于已经垄断国内市场多年的国外微控制器大厂,国产微控制器的参考开发资料和书籍依然十分匮乏,这也是国产微控制器无法快速普及的一大痛点。本书围绕GD32E230xx系列微控制器展开介绍,希望为GD32微控制器开发人员或爱好者提供一些简单的开发示例和参考。 全书共有14个实验,在本书配套资料包中还附加了6个实验及对应的学习手册,所有实验例程代码和学习手册均按照统一规范编写完成。20个实验都包括实验内容、实验原理、实验步骤、本章任务和本章习题5个环节,并且每个实验都有详细的步骤和源代码,以确保读者能够顺利完成。另外,本书还详细介绍了实验的内容和设计思路,以保证读者能够深入理解实验所涉及的知识点。每个实验的最后都有一个任务,作为本章实验的延伸和拓展。因此,能够顺利完成并理解该章实验的读者,再加上深入思考,都能够完成这些任务。“本章任务”之后是本章习题,用于帮助读者巩固本章的知识。 学习一款微控制器,可以先了解微控制器的外设结构和一些常用的寄存器,然后查阅参考手册,掌握这些外设和寄存器的配置方法,并熟悉微控制器各个引脚的功能。但微控制器的学习强调实践,仅停留在理论上无异于纸上谈兵;正确的方法是结合硬件平台,不断实践与探索,并编写和调试程序,在解决实际问题的过程中加深对微控制器的理解,熟悉微控制器程序开发的流程。 在微控制器程序开发的过程中,学会查阅参考手册是开发人员必须掌握的技能,对初学者更是大有裨益。本书引用了参考手册的部分内容,更多的是引导读者自行查阅手册,以养成良好的开发习惯。开发需要用到的参考手册存放于本书配套资料包中,感兴趣的读者也可以访问兆易创新官方网站搜索和下载更多参考资料。 微控制器的涉及面非常广,除了要掌握各种电路知识、C语言、计算机体系架构,还要熟悉微控制器的寄存器、固件库及各种集成开发环境、下载工具和串口调试工具等。为了减轻查找资料和熟悉工具的负担,便于读者将更多的精力聚焦于实践环节,本书将每个实验涉及的参考手册上的知识点统一汇总在“实验原理”中,并将集成开发环境、程序下载工具、串口助手工具等的使用方法穿插于各个章节中。这样,读者就可以通过本书和一块GD32E2杏仁派开发板,轻松踏上学习GD32E230xx系列微控制器之路,在实践过程中掌握各种知识和技能。 简单总结一下本书的特点: (1)微控制器系统设计以一块GD32E2杏仁派开发板作为实践载体。微控制器之所以选取GD32E230C8T6,主要考虑到GD32微控制器在目前市面上使用得较为广泛。而且该系列的微控制器具有功耗低、外设多、基于库开发、灵活性强、性价比高等优势。 (2)对每个实验涉及的知识点均详细介绍,未涉及的知识点几乎不予介绍。这样,初学者就可以快速掌握微控制器系统设计的绝大多数基本知识点。 (3)各种规范贯穿于整个微控制器系统设计的过程中,如Keil集成开发环境参数设置、工程和文件命名规范、版本规范、软件设计规范等。 (4)所有实验严格按照统一的工程架构设计,每个子模块按照统一的标准设计。 (5)配有完整的资料包,既包括GD32E2杏仁派开发板原理图、例程、软件包、软件资料,还包括配套的PPT、视频等。这些资料会持续更新,下载链接通过微信公众号“卓越工程师培养系列”获取。 读者在使用本书开展实验时,建议先通过第2章和第3章快速熟悉整个开发流程,对于第4~7章,务必花费大量的时间和精力,重点学习外设架构、寄存器、固件库函数、驱动设计和应用层设计等,并认真总结这4章的经验,最后,将这4章总结的经验灵活运用在后面的14个实验中(包含配套资料包中的实验),因为第4~7章基本涵盖了后面14个实验70%的知识点。学习过程中要学会抓重点,比如,第4~7章建议花费40%的时间和精力,而剩余的14个实验建议花费60%的时间和精力,切勿平均分配时间,而且学习过程中要不断总结和归纳。 另外,本书中的程序都严格按照《C语言软件设计规范(LY-STD001—2019)》编写。设计规范要求每个函数的实现必须有清晰的函数模块信息,包括函数名称、函数功能、输入参数、输出参数、返回值、创建日期和注意事项。由于本书篇幅有限,实验例程中每个函数的实现均省略了函数模块信息,但是,读者在编写程序时,建议完善每个函数的模块信息。“函数实现及其模块信息”(位于本书配套资料包的“08.软件资料”文件夹)罗列了所有函数的实现及其模块信息,供读者开展实验时参考。 深圳市乐育科技有限公司(以下简称“乐育科技”)开发了一系列针对卓越工程师培养的软/硬件开发平台,并在电子工业出版社与各高校教师联合出版了二十余部“卓越工程师培养系列”教材。本书针对兆易创新的GD32系列芯片,同样得到了乐育科技的全方位支持,乐育科技不仅开发了本书配套的GD32E2杏仁派开发板,还设计了整套开发例程,并参与了本书的编写。兆易创新的金光一及徐杰同样为本书的出版提供了充分的技术支持。电子工业出版社张小乐编辑为本书的出版做了大量的编辑和审校工作。在此一并致以衷心的感谢。特别感谢深圳大学、兆易创新、乐育科技和电子工业出版社的鼎力支持。 钟世达、郭文波、董磊、潘志铭、张沛昌、黄梅贵等参与了全书的编写。由于编者水平有限,书中难免有不成熟和错误的地方,恳请读者批评指正。读者反馈发现的问题、获取相关资料或遇实验平台技术问题,可发信至邮箱:ExcEngineer@163.com。
第1章 GD32开发平台和工具 1 1.1 为什么选择GD32 1 1.2 GD32E230xx系列芯片介绍 1 1.3 GD32E2杏仁派开发板电路 简介 3 1.4 GD32E2杏仁派开发板可以开 展的部分实验 11 1.5 GD32微控制器开发工具的安 装与配置 11 1.5.1 安装Keil 5.30 11 1.5.2 设置Keil 5.30 14 本章任务 15 本章习题 15 第2章 基准工程 16 2.1 实验内容 16 2.2 实验原理 16 2.2.1 寄存器与固件库 16 2.2.2 Keil编辑和编译及程序下载 过程 20 2.2.3 GD32工程模块名称及 说明 21 2.2.4 相关参考资料 21 2.3 实验步骤与代码解析 22 本章任务 36 本章习题 36 第3章 串口电子钟 37 3.1 实验内容 37 3.2 实验原理 37 3.2.1 RunClock模块函数 37 3.2.2 函数调用框架 39 3.2.3 Proc2msTask与 Proc1SecTask 40 3.2.4 程序架构 40 3.3 实验步骤与代码解析 41 本章任务 45 本章习题 45 第4章 GPIO与流水灯 46 4.1 实验内容 46 4.2 实验原理 46 4.2.1 LED电路原理图 46 4.2.2 GD32E23x系列微控制器的 系统架构与存储器映射 46 4.2.3 GPIO功能框图 50 4.2.4 GPIO部分寄存器 52 4.2.5 GPIO部分固件库函数 58 4.2.6 RCU部分寄存器 60 4.2.7 RCU部分固件库函数 61 4.2.8 程序架构 62 4.3 实验步骤与代码解析 63 本章任务 68 本章习题 68 第5章 GPIO与独立按键输入 69 5.1 实验内容 69 5.2 实验原理 69 5.2.1 独立按键电路原理图 69 5.2.2 GPIO功能框图 70 5.2.3 GPIO部分寄存器 70 5.2.4 GPIO部分固件库函数 71 5.2.5 按键去抖原理 71 5.2.6 程序架构 73 5.3 实验步骤与代码解析 74 本章任务 81 本章习题 82 第6章 串口通信 83 6.1 实验内容 83 6.2 实验原理 83 6.2.1 串口通信协议 83 6.2.2 串口电路原理图 86 6.2.3 串口功能框图 87 6.2.4 串口部分寄存器 90 6.2.5 串口部分固件库函数 94 6.2.6 异常和中断 96 6.2.7 NVIC中断控制器 99 6.2.8 NVIC部分寄存器 99 6.2.9 NVIC部分固件库函数 102 6.2.10 串口模块驱动设计 104 6.2.11 程序架构 109 6.3 实验步骤与代码解析 110 本章任务 119 本章习题 119 第7章 定时器中断 121 7.1 实验内容 121 7.2 实验原理 121 7.2.1 通用定时器L4结构框图 121 7.2.2 通用定时器部分寄存器 124 7.2.3 定时器部分固件库函数 126 7.2.4 RCU部分寄存器 129 7.2.5 程序架构 129 7.3 实验步骤与代码解析 131 本章任务 137 本章习题 137 第8章 SysTick 138 8.1 实验内容 138 8.2 实验原理 138 8.2.1 SysTick功能框图 138 8.2.2 SysTick实验流程图分析 139 8.2.3 SysTick部分寄存器 140 8.2.4 SysTick部分固件库函数 142 8.2.5 程序架构 143 8.3 实验步骤与代码解析 144 本章任务 148 本章习题 148 第9章 RCU 149 9.1 实验内容 149 9.2 实验原理 149 9.2.1 RCU功能框图 149 9.2.2 RCU部分寄存器 151 9.2.3 RCU部分固件库函数 156 9.2.4 FMC部分寄存器 158 9.2.5 FMC部分固件库函数 159 9.2.6 程序架构 159 9.3 实验步骤 161 本章任务 164 本章习题 164 第10章 外部中断 165 10.1 实验内容 165 10.2 实验原理 165 10.2.1 EXTI功能框图 165 10.2.2 EXTI部分寄存器 167 10.2.3 EXTI部分固件库函数 170 10.2.4 SYSCFG部分寄存器 171 10.2.5 SYSCFG部分固件库 函数 173 10.2.6 程序架构 173 10.3 实验步骤 175 本章任务 179 本章习题 179 第11章 OLED显示 180 11.1 实验内容 180 11.2 实验原理 180 11.2.1 OLED显示模块 180 11.2.2 SSD1306的显存 182 11.2.3 SSD1306常用命令 182 11.2.4 字模选项 183 11.2.5 ASCII码表与取模工具 184 11.2.6 GD32E230C8T6的GRAM 与SSD1306的GRAM 184 11.2.7 OLED显示模块显示流程 185 11.2.8 程序架构 185 11.3 实验步骤 187 本章任务 199 本章习题 199 第12章 定时器与PWM输出 200 12.1 实验内容 200 12.2 实验原理 200 12.2.1 PWM输出实验流程图 分析 200 12.2.2 通用定时器部分寄存器 202 12.2.3 通用定时器部分固件库 函数 205 12.2.4 程序架构 208 12.3 实验步骤 209 本章任务 214 本章习题 215 第13章 定时器与输入捕获 216 13.1 实验内容 216 13.2 实验原理 216 13.2.1 输入捕获实验流程图 分析 216 13.2.2 通用定时器部分寄存器 218 13.2.3 通用定时器部分固件库 函数 221 13.2.4 程序架构 222 13.3 实验步骤 224 本章任务 230 本章习题 230 第14章 DAC 231 14.1 实验内容 231 14.2 实验原理 231 14.2.1 TLC5615芯片 231 14.2.2 DAC实验逻辑图分析 233 14.2.3 PCT通信协议 233 14.2.4 PCT通信协议应用 239 14.2.5 程序架构 241 14.3 实验步骤 243 本章任务 254 本章习题 254 第15章 ADC 255 15.1 实验内容 255 15.2 实验原理 255 15.2.1 ADC功能框图 255 15.2.2 ADC时钟及其转换时间 257 15.2.3 ADC实验逻辑框图分析 257 15.2.4 ADC缓冲区 258 15.2.5 ADC部分寄存器 258 15.2.6 ADC部分固件库函数 263 15.2.7 DMA功能框图 267 15.2.8 DMA部分寄存器 269 15.2.9 DMA部分固件库函数 273 15.2.10 程序架构 275 15.3 实验步骤 277 本章任务 288 本章习题 288 附录A GD32E2杏仁派开发板原 理图 289 附录B ASCII码表 290 参考文献 291