死锁的复现方式在I2C恢复函数下个断点(检测到I2C多次超时之后,应该能跳转到I2C恢复函数)使用镊子,将SCL与SDA短接,很快就能看到程序停到恢复函数的断点上,此时再执行恢复函数,看能否正常走出(可在回复函数中写个死循环,只有I2C正常才跳出,检测I2C正常的办法,可以读从设备的ID)voidHAL_I2C_MspInit(I2C_HandleTypeDef*i2cHandle){GPIO_InitTypeDefGPIO_InitStruct={0};if(i2cHandle->Instance==I2C1){/*USERCODEBEGINI2C1_MspInit0*//*USERCODE
#include"gd32e50x.h"#if 0 //RS~A23 16根数据线#defineBANK0_LCD_D ((uint32_t)0x61000000) //LCDdataaddress,RS~A2316线 2^23*2=0x1000000 #defineBANK0_LCD_C ((uint32_t)0x60000000) //LCDregisteraddressAlternate2:EXMC_NE0=PD7~LCD_CS#defineLCD_WR_DATA(value) ((*(__IOuint16_t*)(BANK0_LCD_D))=((uint16_t)
1.SPI的通信原理SPI既可以做主机也可以做从机。当做主机时。MOSI,SCK,CS都是作为输出。 而作为从机时。MOSI,SCK,CS都是作为输入。 所以SPI的硬件电路应该实现这样的功能。2.GD32/STM32的SPI框图 1.GD32框图如下图做主机的数据流向: 如下图做从机的数据流向: 2.STM32框图 通过一些寄存器的配置来控制电路。跟GD32的差不多。波特率配置越高,采样越快。SPI的速率越快。3.SPI的寄存器介绍 1.控制寄存器0(SPI_CTL0) 2.控制寄存器1(SPI_CTL1) 3. 状态寄存器(SPI_STAT) 4.数据寄存器(SPI_DATA) 4.
Bootloader(引导加载程序)的主要任务是引导加载并运行应用程序,我们的软件升级逻辑也一般在BootLoader中实现。本文将详细介绍BootLoader在单片机中的实现,包括STM32、GD32、NXPKinetis等等的所有单片机,因为无论是什么样的芯片,它实现的逻辑都是一样的。注意,本篇文章主要是介绍实现一个严谨的BootLoader需要掌握的基本知识和需要考虑的细节,如果不注意一些细节,应用层的代码很可能会受到影响。对于Linux的BootLoader来说其实也是一样的,但它还需要初始化MMU、引导内核等等,这里我们不做过多的讨论。文章目录1基础知识1.1NORFlash和NAN
一、产品替代关注点:芯片架构:不同的MCU可能采用不同的架构,例如AVR、ARM、PIC等。当替换MCU时,确保选择一个具有相似或兼容的架构,以便在代码移植过程中减少工作量。这样可以更容易地复用现有的代码和资源。寄存器地址:MCU的寄存器用于控制和配置各种硬件功能。不同的MCU可能具有不同的寄存器地址映射。因此,在替换MCU时,需要检查新MCU的寄存器手册,了解其寄存器地址是否与旧MCU相同或类似。如果地址不同,就需要对代码进行适当的修改。功能和规格:确保新MCU能够满足原始MCU的功能和技术要求。比较关键的参数包括处理器速度、内存容量、IO口数量和类型等。外设和接口:检查新MCU是否提供了与
一、需求 初次学习USB相关知识,可以从简单的开始。手上有一块兆易创新的GD32开发板,熟悉USB的知识。 现在手上有开发板带的关于HID标准程序,该程序已经实现的功能是开发板USB作为设备,按开发板上不同的键,在PC机上显示字符:也就是模拟键盘。但是只有输入端点1上报键值的功能,没有PC机下发LED控制的功能,所以试着加一下。 图1GD32厂家自带的USB文档说明二、代码修改 打开开发板自带的标准HID程序:HID-Keyboard工程; 当前程序使用IN1来上传HID报表描述符,有为IN1分配的数据缓冲区data(
1、编写CAN驱动 在RT-Thread的bsp文档中没有找到GD32F4xx的CAN驱动文件,此处参考STM32的drv_can编写CAN驱动。1.1创建CAN设备1.1.1CAN设备结构体structgd32_baudrate_tab{rt_uint32_tbaudrate; //波特率rt_uint8_tsjw; //配置参数rt_uint8_tbs1; rt_uint8_tbs2; rt_uint16_tprescaler;
关于STM32F4和GD32F4以太网,LAN8720+lwip+freemodbus这里使用了大佬小灰灰搞电子的代码,文章看STM32F407+LAN8720移植Lwip和freeModbus实现MODBUSTCP代码看STM32F407+LAN8720+LWIP移植freemodbusTCP.zip他的代码是基于正点原子F407的板子开发的,如果是别的板子,需要修改引脚小灰灰的代码里,没有对02功能码的处理函数进行完善,在port.c中,修改eMBRegDiscreteCB函数如下:/*****************************************************
文章目录一、前言二、差异性三、软件移植部分1.前期准备1.1安装GD32固件库1.2选择所用芯片2.修改程序2.1启动时间(内部时钟可不改)2.2主频2.2.1系统时钟配置2.2.2108MHz宏定义第一处第二处第三处第四处第五处2.2.3串口2.2.4FLASH四、总结一、前言在一个慵懒的日子里,我因为不想花费太多时间和精力,直接将原来为STM32编写的工程进行了修改,使其适用于GD32工程。这个过程并不复杂,只需要对一些特定的代码进行替换和调整,以适应GD32的硬件架构和指令集。然而,由于我对STM32和GD32之间的差异了解不够深入,这个过程也让我犯了一些错误。最终,经过一番努力,我终于
我正在尝试在我的Ubuntu、Apache2、phpbox上添加对GD扩展的支持。然而,我的php.ini文件似乎与大多数版本的INI文件不同,而且它们似乎没有扩展注释或占位符。这是搬到哪里去了?他们是添加扩展程序的新位置还是新方法?我很茫然,我只找到了2个php.ini文件。一个用于Apache2,一个用于命令行界面。最终我问这个问题是因为错误的正常修复Undefinedoffset:1in[...]images.phponline50Fatalerror:Calltoundefinedfunctionimagecreatefrompng()in[...]第309行的function