tag 标签: 固件库开发

相关博文
  • 热度 4
    2023-12-9 10:58
    758 次阅读|
    0 个评论
    谢谢兆易创新高工、芯片综合服务商映时科技。谢谢面包板论坛。 感谢 机械工业出版社。 感谢提供的这一次试读机会。 感谢 映时科技 董晓 任保宏 。 接上九篇: 《GD32 MCU原理及固件库开发指南》+试读心得(1) 《GD32 MCU原理及固件库开发指南》+试读心得(2)第八章 《GD32 MCU原理及固件库开发指南》+试读心得第一章(1) 《GD32 MCU原理及固件库开发指南》+试读心得第一章(2) 《GD32 MCU原理及固件库开发指南》+试读心得第二章(1) 《GD32 MCU原理及固件库开发指南》+试读心得第二章(2) 《GD32 MCU原理及固件库开发指南》+第三章试读心得 《GD32 MCU原理及固件库开发指南》+第四章试读心得 《GD32 MCU原理及固件库开发指南》+第五章MCU基础外设 《GD32 MCU原理及固件库开发指南》+第六章模拟外设 在阅读《GD32 MCU原理及固件库开发指南》之后,我深感嵌入式系统中的串口通信不仅是一门技术,更是一种艺术。在微控制器的世界里,串口通信作为一种通用的通信接口,为设备间的数据交换提供了可能。而GD32F303的USART(Universal Synchronous/Asynchronous Receiver Transmitter)模块更是将这种可能性推向了新的高度。 首先,通过使用printf函数进行实例讲解,我了解到了USART的半双工通信模式、DMA通信模式、同步模式、接收超时、中断方式收发等特性。这不仅让我对USART有了更深入的理解,也让我明白了在硬件系统中,如何灵活、有效地利用这些特性来实现数据通信。 然后,通过构建一个串口命令行,我体验到了使用串口进行程序调试的便捷性。相对于传统的JTAG或SWD接口,串口命令行无疑提供了更大的灵活性,使得我们可以在任何时间、任何地点对程序进行调试。更为重要的是,这个串口命令行经过了实际工程的验证,占用资源少,易于移植到其他MCU,甚至是资源更为紧张的8位微控制器上。 让我们继续用幽默的方式讲解这些通信模式。 1. USART的半双工通信模式 半双工通信模式就像是在一个嘈杂的餐厅里与邻桌人交谈。你们只能通过一个人讲话,另一个人倾听来交流。如果你试图同时说话,那么你们将无法听清对方的话。这就像是在争夺话语权,而最后只会变成一场嘈杂的混乱。 2. DMA通信模式 DMA通信模式就像一个非常专业的侍者。你可以告诉侍者你要什么,然后他会为你送到餐桌上,而你则可以继续享受你的晚餐。你不必亲自去取食物,侍者会帮你完成一切。这样,你可以专注于更重要的事情,比如品尝美食。 3. 同步模式 同步模式就像是一场精心编排的舞蹈表演。每个舞者都必须按照相同的节奏和步伐跳舞,以确保整个表演的协调性和完美性。如果有人跳错了步伐,那么整个表演就会受到影响。因此,在同步通信中,每个设备都必须按照相同的速度和顺序发送和接收数据,以确保数据的准确性和一致性。 4. 接收超时 接收超时就像是在等待一个迟到的朋友。你等了很长时间,但是他还是没有出现。最后,你决定离开并做其他事情。这就是接收超时的情况,如果设备在特定的时间内没有接收到数据,它就会放弃等待并返回一个错误。这就像是在告诉朋友:“我不能再等你了,我要去做其他事情了。” 5. 中断方式收发 中断方式收发就像是在打瞌睡时被突然的电话铃声吵醒。你正在做美梦,但是电话响了,你必须立刻醒来接电话。同样地,当设备需要发送或接收数据时,它会发出一个中断信号,让CPU停止当前的工作并处理数据。这就像是在说:“喂!喂!快醒醒!有重要的事情要做!”这样,CPU可以高效地处理数据,而不会错过任何重要的信息。 希望这些更幽默的讲解方式能够帮助你更好地理解这些通信模式! 使用串口命令行来调试程序比使用JTAG或者SWD接口要更加灵活。 首先,让我们来了解一下这些高大上的名词都是啥意思。JTAG和SWD接口是我们在硬件调试中常用的两种接口,可以帮助我们更加方便地调试嵌入式系统等硬件设备。而串口命令行则是一种通过串口通信来进行调试的方式。 好了,科普完毕,接下来让我们进入正题。 使用JTAG或者SWD接口调试程序,就像是通过一个高级餐厅的旋转门进入餐厅一样,虽然看起来高端大气上档次,但是实际上却有很多限制。比如你只能按照规定的方向进入或退出,而且还必须慢慢地推门,否则门就会卡住。 而使用串口命令行调试程序则像是通过一个街头小摊的摊位门进入市场一样,虽然看起来比较简陋,但是却非常灵活。你可以随时随地进出,而且还可以自由地控制门的开关速度,非常方便。 另外,使用串口命令行还有一个好处就是可以实现远程调试。你可以在家里通过电脑连接到一个远程的串口服务器上,就可以对远在千里之外的程序进行调试了。这就像是你在家里通过手机APP控制智能家居一样,非常便捷。 综上所述,使用串口命令行来调试程序比使用JTAG或者SWD接口要更加灵活,不仅可以实现远程调试,而且还非常便捷。当然,如果你要装X的话,还是可以使用JTAG或SWD接口来调试程序的,毕竟旋转门看起来还是比较高端的。 JTAG和SWD都是用于硬件调试的接口,以下是它们的一些主要区别: 1. 定义:JTAG(Joint Test Action Group)是一种国际标准测试协议,主要用于芯片内部测试。而SWD(Serial Wire Debug)则是一种串行调试接口,采用不同的调试协议。 2. 引脚数量:标准的JTAG接口是4线的,包括TMS、TCLK、TDI、TDO,分别是模式选择、时钟、数据输入线和数据输出线。一般再加上VCC和GND,因此共有6个引脚。而SWD只需要4个引脚,SW_CLK、SW_SDIO、NREST、VDD,所以结构简单。 3. 使用范围:JTAG接口的使用范围比SWD广泛。JTAG可以深入芯片内部进行测试,而SWD主要用于调试。 4. 速度和可靠性:在高速模式和大数据量的情况下,SWD模式比JTAG更加可靠。JTAG下载程序可能会失败,但是SWD发生错误的概率会小很多。基本使用JTAG仿真模式的情况下都可以直接使用SWD模式,只要仿真器支持。 5. 引脚需求:当GPIO刚好缺一个的时候,可以使用SWD仿真,这种模式支持更少的引脚。在板子的体积有限的时候推荐使用SWD模式,它需要的引脚少,当然需要的PCB空间就小。 在嵌入式系统的通信方式中,I2C和SPI是最为常见和重要的两种。从基础知识到实际应用,我收获颇丰。 7.2节中,我了解了I2C接口的背景知识和特点。I2C接口是一种简单、灵活的通信协议,广泛应用于微控制器和其他设备之间的通信。通过学习GD32F303的I2C外设及其相关API,我深入理解了I2C主从通信方式,包括查询方式、DMA方式、中断方式。最后,我使用GD32F303的I2C接口实现了对BluePillExt开发板板载EEPROM的读写访问。这个过程让我深刻体会到I2C的便利性和实用性。 首先,想象一下I2C接口就像是一个小镇上的邮递员。他(接口)负责在镇上的各个房子(微控制器和外设)之间传递信件(数据)。 1. **简单**:I2C接口就像是个只会骑自行车送信的邮递员。他不需要复杂的交通工具,只需一个简单的自行车就能完成任务。同样,I2C接口不需要复杂的硬件设计,两根线就能实现通信,多么简洁啊! 2. **便宜**:你知道小镇上的邮递员薪水通常都不会太高,对吧?同样,使用I2C接口的设备通常都很便宜,毕竟它只需要两根线和简单的硬件设计。 3. **低速**:你知道邮递员送信的速度通常都不会太快,对吧?他们不是闪电麦皮,不能一瞬间就送完所有的信。同样,I2C接口的速度也是相对较慢的,但这并不影响它的工作效率。毕竟,慢工出细活嘛! 然后我们来聊聊重要参数: * **时钟频率**:这就像邮递员的工作节奏。如果节奏太快,邮递员可能会送错信;如果节奏太慢,信件可能要及时才能到达。所以,我们需要找到一个合适的节奏,既能保证送信的效率,又不会让邮递员感到压力。 * **地址空间**:想象一下每个房子都有一个唯一的门牌号,邮递员通过这个门牌号就能准确找到房子。同样,I2C接口上的每个设备都有一个唯一的地址,微控制器通过这个地址就能找到需要通信的设备。 * **数据传输速率**:这就像邮递员每天能送多少信。如果他送得太快,可能会出错;如果他送得太慢,信件可能会堆积。所以我们需要找到一个合适的速率,既能保证送信的效率,又不会让邮递员感到压力。 现在,你是不是对I2C接口有了更深入的了解呢?如果你觉得这个解释很有趣或者很有帮助,别忘了给我点个赞哦! 此外,7.3节中,我也学习了SPI的基础知识,了解了SPI的特点和重要参数。SPI是一种同步串行通信协议,具有高速度、高效率、占用资源少等优点。通过学习GD32F303的SPI外设及其相关API,我进一步了解了SPI的通信方式,包括查询方式、DMA加速实现SPI高性能传输、SPI半双工通信和中断发送方法。最后,我使用GD32F303的SPI实现了对BluePillExt开发板板载SPI Flash的读写擦除访问。这个过程让我深刻体会到SPI的高效性和灵活性。 总的来说,通过学习GD32F303的USART、I2C和SPI等通信接口的使用方法,我对嵌入式系统中的数据通信有了更深的理解。这不仅让我明白了这些接口在硬件系统中的重要性,也激发了我进一步探索和学习嵌入式系统其他领域的兴趣。我相信,随着我对嵌入式系统学习的深入,我将能够更好地利用这些接口为我的项目带来更多的可能性。 谢谢! 本人在本论坛内的试读 : 《Proteus实战攻略》+7 第五章双足机器人仿真实例 《Proteus实战攻略》+6 第四章AVR单片机仿真 本人在本论坛内的帖子: 【灵动MM32SPIN030C单电机控制器】+(二)磁场导向控制-空间矢量调制(SVM) 【灵动MM32SPIN030C单电机控制器】+(一)使用Motor-DK (MM32SPIN030C)芯片的体验与心得 米尔-STM32MP135开发板试用2-螺旋桨控制(原创)首发(开源) 米尔-STM32MP135开发板试用4-Linux控制螺旋桨升力大小(原创) 【KT148ADSP语音芯片】+试用心得1 【KT6368A双模蓝牙芯片】+体验 我希望这些内容能对您有所帮助! 2023年12月8日
  • 热度 2
    2023-9-26 23:56
    1533 次阅读|
    0 个评论
    本章旨在为GD32MCU初学者提供全面的入门开发指导。在本文中,我们将介绍GD32MCU开发所需的基本资料和获取途径,同时详细阐述在软件平台开发和硬件系统设计方面的基本步骤和注意事项。此外,还将介绍烧录调试工具的使用方法和固件库架构及使用方法。通过对这些内容的学习,读者将对GD32MCU的开发过程有全面的了解,并为后续深入学习和应用打下基础。 一、GD32MCU开发资料及其获取途径 要进行GD32MCU的开发,首先需要获取相应的开发资料。这些资料包括芯片的datasheet、SDK、API库、参考设计等。下面是一些主要的获取途径: 1. GD32官方网站:这是最直接获取GD32MCU开发资料的地方。在官方网站上,可以找到最新的芯片产品信息、技术文档、SDK、API库和参考设计等资料。 2. GD32官方论坛:在这里,可以与其他GD32MCU开发者交流心得和经验,同时也可以获取到一些有用的开发资料。 3. 第三方网站和论坛:例如面包板社区等网站和论坛上,也可以找到一些GD32MCU的开发资料。 4. 开源项目和代码:在一些开源项目和代码中,可以找到关于GD32MCU的开发经验和示例代码,这对初学者非常有帮助。 二、软件平台开发 在软件平台开发方面,主要介绍使用Keil MDK和IAR IDE开发环境进行GD32MCU的开发。 1. 新建工程:首先在开发环境中创建一个新的工程,并选择正确的芯片型号和开发板。 2. 导入已有工程:如果已经有现成的代码工程,可以将其导入到开发环境中。 3. 调试工程:在完成代码编写后,可以使用开发环境中的调试工具进行调试,检查程序运行是否正确。 三、硬件系统设计 在硬件系统设计方面,这里主要介绍GD32MCU最小系统的推荐设计。最小系统包括芯片、时钟电路、复位电路、调试电路和电源电路等基本部分。在设计时,可以参考GD32MCU的参考设计,并结合实际需求进行修改和优化。完成硬件设计后,需要进行PCB制作和电路仿真,确保电路功能的正确性。GD32MCU的硬件系统设计需要考虑最小系统的设计和外围电路的搭建。下面我们推荐一种最小系统的设计,并说明电路设计、接线、PCB制作及电路仿真等基本步骤。 1. 最小系统设计 GD32MCU的最小系统包括芯片、时钟电路、复位电路、调试接口和电源电路等基本部分。以下是具体设计方案: (1)选用适当的GD32MCU芯片型号; (2)设计时钟电路,为芯片提供时钟信号; (3)设计复位电路,确保系统在上电时能够正确初始化; (4)选择合适的调试接口,如JTAG或SWD模式; (5)设计电源电路,为芯片提供稳定的工作电压。 2. 电路设计 根据功能需求,将GD32MCU与外围器件进行合理连接。可以使用原理图或PCB进行电路设计。在设计过程中,需要考虑信号的完整性、电源的质量和稳定性等因素。 3. 接线 根据电路设计,将芯片、电阻、电容等电子元器件进行合理连接。在接线过程中,需要注意信号线的走线和布局,以减小电磁干扰和提高系统稳定性。 4. PCB制作及电路仿真 根据接线图制作PCB板,并进行电路仿真测试,以确保设计的正确性和可靠性。可以使用相应的仿真软件进行电路仿真。在仿真过程中,可以对电路的性能、噪声和稳定性等方面进行评估,并对不合理的部分进行调整和优化。 四、烧录调试工具 在进行GD32MCU的开发过程中,需要使用烧录调试工具对芯片进行烧录和调试。这里主要介绍使用GD-Link和JLink烧录调试方法。 1. 接口电路:GD-Link和JLink都需要通过USB接口与电脑连接,同时需要通过串口与芯片通信。因此需要正确连接电脑、烧录调试工具和芯片的USB和串口。 2. 在线调试:通过烧录调试工具可以在线调试程序,检查程序运行过程中变量、寄存器的值是否正确,同时也可以单步执行代码。 3. 在线烧录:通过烧录调试工具可以将程序烧录到芯片中,从而实现对芯片功能的修改和升级。 4. 离线烧录:离线烧录通常使用专门的烧录软件,通过下载已经编译好的二进制文件到芯片中来实现程序的烧录。在这里我们主要介绍使用GD-Link进行离线烧录的方法。首先将编译好的二进制文件通过USB接口拷贝到电脑中,然后使用GD-Link的工程模式将文件烧录到芯片中。 五、固件库架构及使用方法 GD32MCU的固件库包含了多个文件夹和文件,每个文件夹和文件都有其特定的功能和使用方法。 随着MCU(微控制器)集成度的不断提升,片内外设资源和功能也越来越丰富。若采用传统的直接操作寄存器的方法进行开发,则可能会带来开发进度慢、代码可读性差的问题。因此,MCU厂商一般都会推出寄存器操作封装库(即固件库),以方便用户使用及开发。固件库是一个固件函数包,它由程序、数据结构和宏组成,包括了所选MCU所有外设的性能特征。固件库中还有对每一个外设的驱动描述和基于评估板的固件库使用例程。通过使用固件库,用户无需深入掌握细节,也可以轻松应用每一个外设。使用固件库可以大大减少用户的编程时间,从而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。可以通过调用一组通用API来实现对外设的驱动,这些API的结构、函数名称和参数名称都进行了标准化处理。 在此以GD32F30×系列固件库为例说明固件库的架构及使用方法。该系列MCU的固件库分为两个层级:抽象层和底层。 抽象层提供了较为简单的API,使得用户可以忽略底层硬件细节,直接进行开发。它分为几个子模块,包括初始化、数据传输控制、中断管理等。数据传输控制模块提供了各种UART、SPI、I2C等外设的初始化函数,用于数据通信。中断管理模块则提供了各种中断的使能、禁用和标志位清除等功能。 底层更加接近硬件,为用户提供了更深入的控制。它包括硬件抽象层(HAL)、底层驱动和中间层。HAL为底层驱动提供了更为简单的接口,使得用户可以更容易地操作硬件。底层驱动则是针对具体硬件实现的代码,例如GPIO驱动、ADC驱动等。中间层则提供了底层驱动和抽象层之间的接口,使得底层驱动可以更容易地被抽象层调用。 为了使用GD32MCU固件库进行开发,需要搭建开发平台。首先,需要选择一款开发板,例如GD32F30×系列的评估板。然后,需要安装开发工具链(例如Keil或IAR),并将GD32MCU固件库添加到工程中。接着,编写代码并调用固件库中的函数进行外设控制和数据传输等操作。最后,将代码编译并烧录到MCU中,进行调试和测试。 在本文中,我们将以GD32F30×系列固件库为例,详细介绍GD32MCU固件库的架构及使用方法。 一、GD32MCU固件库架构 GD32F30×系列固件库由程序、数据结构和宏组成,每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。可以通过调用一组通用API来实现对外设的驱动,这些API的结构、函数名称和参数名称都进行了标准化处理。 GD32F30×系列固件库具有以下特点: 1. 外设资源丰富:GD32F30×系列MCU具有丰富的外设资源,包括多种通信接口、多种定时器、多种PWM通道、多种ADC/DAC通道等。 2. 寄存器映射控制准确:GD32F30×系列MCU的寄存器映射关系简单明了,便于操作和控制。 3. 兼容性好:GD32F30×系列固件库兼容性好,可适用于GD32系列下的所有型号的MCU。 4. 安全性高:GD32F30×系列固件库的安全性高,采用硬件加密技术,有效防止程序被破解或篡改。 GD32MCU固件库的架构和使用方法类似其他系列MCU的固件库。通过使用固件库,用户可以简化开发流程、提高开发效率并降低开发成本。在搭建开发平台后,根据具体应用需求选择合适的固件库并调用相关API函数进行开发即可实现特定功能。 谢谢!