登录
首页 » Others » STM32移植到GD32的注意事项

STM32移植到GD32的注意事项

于 2021-05-06 发布
0 351
下载积分: 1 下载次数: 1

代码说明:

GD32的性价比和稳定性都很高。我更喜欢用GD32.。但不是100%兼容的。需要注意一些细节。2.内部 Flash1)芯片设置读保护用法描述由于GD的Fash是自己的专利技术,STM的Fash是第三方提供的,所以GD的 Flash和STM的Fash有些许差异。GD的擦除时间会长一点解决方法在写完KEY序列以后,需要读该位,确认key已生效。所以,这里应该插入While(! (FLASH->CR &0x200);//Wait OPTWRE或可简单插入两个NOPNOPONOPO在ST库中,只有FLASH Status FLaSH Erase Option Bytes(void)FLaSH Status FlaSH ProgramOption Byte Data(uint32 t Address, uint8 t DataFLASH Status FLASH_ Enable WriteProtectionuint32 t FLASH PagesFLASH Status FLASH ReadOutProtection (Functional State New State)四个函数需要修改。2)IAP在应用中编程描述GD32由于有fash的0访问时序,同SM32在Fash的Ease和 Program上存在差别,GD32的 Erase和 Program时间比STM32的稍微长些建议对 Erase和 Progran时间进行修改解决方法将宏定义井 define erase timeout(luint32 t)OX000B000O)#define ProgramTimeout(uint32_t)ox00002000修改为:#define erasetimeout((uint32_t)OX00OFFFFF#define ProgramTimeout(uint32 t)OxOOOOFFFF备注: Erase和 Program时间宏定义在stm3210 x flash. c源文件中路径: braiesSTM32F10 x Std Periph Driversr)3)用IAR下载配置解决方法在批量牛产的时候首先会烧写一个USB的boot,这个boot自动运行后在由上位机软件进行烧写应用程序。如果boot程序不能自动运行则需要重新插拔次电源。给生产造成一些麻烦。产生不能自动运行程序的原因是如果程序设置读保护的话需要等待 FLASH CR的第9[ OPTWRE]位为1.如果没有置位的话继续执行就会出错。由」ST的执行速度慢,程序执行到读 FLASH CR寄存器的时候该位已经置1,GD的执行速度比较快,程序运行到这的时候该位还没置1,因此需要在 FLASH ReadOut Protection函数里面添加一些轮询该位为1或者加延时3.ISP烧写软件1)ISP烧写,建议使用官方烧写软件性述芯片内部同有区别解决方法建以到下载最新版本的另外也有专门的烧写软件(可以到论坛下毂如果使用自制的软件或脱机编程器,实现和完全兼容,建议修改以下参数。页擦除等待超时时间增加至整片擦除等待超时时间增加至左右字编程等待超时时间增加至,臾编程等笭超时时间增加至I/0日1)I0口外部中断使用方法措述在关闭期间,如果外部引脚有电平的变化,在使用MR打开中断后会马上进入中断服务程序。理论是打开中断前,不管管脚是否有电平的变化,都不会影响到打开后的中断响应。解决方法所以解决方法就是通过禁用上升沿或者下降沿检测寄存器来开关中断,不能使用IMR屏蔽奇存器。程序如下关闭沿检测,以达到关闭中断的目的,下降沿使用寄存器,上升沿使用寄存器2)在待机模式,PA8引脚特殊设置描述在使用低功耗的情况下,PA8会被MCU在内部被设置为地PA8复用为MU内部频率输出,超低功耗设时需要悬空解决方法在待机模式,PA8悬空不用3)低功耗下必须注意描述在使用低功耗情况下,把软件全部端口(AF)时钟关掉,无论是否有该端凵。4)当有脉冲群冲击管脚摧述需要在在进入中断后关闭中断4.定时器1)定时器输入捕获模式需要软件清中断描述sTM定吋时器输入捕获模式默认能硬件清中断,GD为了更加严格要求配置,需要做软件清中断解决方法软件清除标志位2)定时器向上脉冲计数模式设置述定时器的用法差异解决方法脉冲计数模式下,装载值必须设置为比预期值大,否则不计数在ST上如果重载值不设置(初始为0)的时候,CNT可以正常计数。在GD上如果重载值不设置保持初始为0的时候,会因为重载值为零,即便是来一个脉冲也会导致所有的寄存器复位从而不能正常计数。型号GD32F1系列MCUF|ah256B8及以上的型号)3)TIM、ADC模块描述Tmer、ADC模块的触发信号宽度要求解决方法|由于内部有高速和低速两条外围总线,Tmer、ADC模块和其他外设共同使用这两个总线。GD32F103/101系列Fash128KB及以下的型号, Timer、ADC等模块识別触发信号的条件是触发信号宽度大于模块所在总线的时钟宽度5.串口 USART1) USART连续发送数据字节有空闲位带述字节间有空闲位解决方法|对于一般的通讯米说,不会有影响,只对于一般在通讯上有特殊协议的,才会产生数据不准确的情况所以,特定情况,修改程序6.I2C总线1)硬件L2C特殊配置述GD的C相对STM的来说要少一个标志位解决、宏地址定义改交方法2、硬件I2C在会在向从机发送7bits地址完成后,从札还没来得及识别。(看客户应用)我们可以在发送完7bits后加个延时,让从机完全识别I2C Send7bitAddress(I2C1, EEPROM ADDRESS, I2C Direction TransmitterintOfffhile(i --3、检测ADDR不能使用I2 C Checkevent函数,因为他会清除ADR,可以使用I2 C Get FlagStatus函数就是把while(! I2C CheckEvent(I2C1I2C EVENT MASTER TRANSMITTER MODE SELECTED))Ey while(! I2C GetFlagStatus(I2C1, I2C FLAG ADDR))4、还有个关于编程步骤的严谨性,跟STW想比,我们是先 Clcar ack,再 Clear Arrd。7.ADC采集1)ADC采样设置述ADC启动解决方法|分三个方面时写入后,需要等待一段时间,如果用库的话就在 ADC CMD后面加20us左右的延付如果采用中断获得采样数据后,需要软件清除中断。8. SDio1) SDIO DAT3pin的在1 bit bus mode和4 bit bus mode下的配置摧述1、SD|O在1 bit bus mode下,DAT3pin是低电平,这样会导致 SD Card进入SP!模式。原因:初始化失败的原因主要是因为GD32的芯片SDO的DAT3∏存在BUG2、在4位模式下,通过上面的方法,程序能止常初始化,但不能正常读写SD卡原因:因为DAT3∏在前面已经配置成推挽输出,所以在4位模式下,不危正常读下。在调用4位模式前,把DAT3的端凵配置成复用推挽输入即可解决问题解决方法「1、1 bit bus mode的解决方法:建议在使能之前,先把配置成推挽输出,)且要置成高电平,使保持高电平即可2、4 bit bus mode的解决方法:在调用4位模式前,把DAT3的端口配置成复用输出即可解决问题。2)程序在刚烧完后能正常读写SD卡,断电再上电后,SD卡初始化失败,需要手动复位一次后才正常描述在某些SD卡中,GD32断电再上电,会引起SD卡上的时钟信号不正常,导致SD卡发送命令失败。解决方法在程序中,打开时钟后,增加一小段延时,以保证下时钟信号稳定。这个延时添加的地方:在即的配置文件中,然后在这个函数中找到就在这个后面加个延时。10. USBA, USB OTG1)客户使用的原工程时需要注意几点解|1、在中,增加如下图红色字体语句for (1=0; 18; i++) EPli= GetEndPoiNT(i)for(i=0:iregs. HC REGS [num]->HCCHAR, hcchar d3 2)pdev->host hc Status =HC NAK而V2.1.0版本的NAK处理过程如下else if (hcint b nak)if(hcchar b. eptype = EP TYPE_ INTR)UNMASK HOST INT CHH(num)USB OTG HC Halt(pdev, numelse if ((hcchar. b. eptype = EP TYPE CTRL)(hcchar b eptype = EP_ TYPE BULK))A re-activate the channel *hcchar, b chen =1hcchar b chris =0USB OTG WRITE REG32(&pdev->regs. HC REGS [num]->HCCHAR, hcchar d32)pdey->host HC Status [num]=HC_NAKCLEAR HC INT(hcreg, nak)唯一的区别就是 CLEAR HC INT( here,nak)的位置,在Ⅵ1.0.0版本中对于CTRL和BUK端点的NAK中断没有清除NAK,我们的芯片会因此产生多次IN传输的请求,导致数据传输错误。改为V2.1.1的写法后传输正常。(注意 HC Status在V2.1.0是数组,在Ⅵ1.0.0是单个数据,直接拷贝的话要去掉后面的[num])B.USB外设的工作频率有限制摧述有最低工作频率的要求,也就是APB1分频后的时钟必须大于12MHz,比如HCLK为56MHz,APB1的最大分频系数为4,56/4=14MHz,可以正常工作。11 SPI1)输入与输出配置要求(STM32不需要如此要求)解决丨GD32在使用SP时,o的配置必须严格遵守主从模式下的输入与输出配置,而方法STM32无此要求,相关代码如下主机模式下|o配置(主机以SP为例):GPIO InitStructure gPio Mode gPio Mode af plGPIO_ Init Structure GPIo Speed GPlO Speed 50MHzGPIO InitStructure. GPio Pin= GPlO Pin 5 GPIO Pin_ 7;GPIO Init(GPIOA, &GPIO InitstructureGPio Init Structure gPio Mode gPio Mode IN floating:GPio InitStructure gpio Pin gpio pin 6GPIO Init(GPIOA, &GPIO InitStructure)从机模式下o配置(从机以SP2为例)GPIo Init Structure GPio Mode gPlo Mode IN FloatingGPIO InitStructure GPIO Speed= GPl Speed 50MHzGPIO_InitStructure GPIO_ Pin GPIO Pin_13 GPIO_ Pin_15GPIO Init(GPIOB, &GPIO InitStructure)gPio Initstructure gpio mode gpio mode af pp.GPIO InitStructure. GPio Pin= GPIo Pin 14:GPIO_Init(GPIOB, &GPIO_Initstructure);3)在GD32的SP的时钟信号,空闲状态需要配置成高电平,以保证数据的稳定性,具体代码如下:红色字体代码解决SPI_ InitStructure SPl Direction =SPI_ Direction_ 2Lines fullDuplex;方法SPI InitStructure SPl Mode SPi Mode master.SPI Initstructure SPl Data Size= SPl Data Size 8bSPlInitStructure SPl_CPOL= SPI CPOL HighSPl Initstructure SPl CPHA= SPI CPHA 2EdgeSPI InitStructure SPI NSS= SPI NSS SoftSPI InitStructure SPl BaudRate Prescaler =SPI Baud Rate Prescaler 256:SPI Initstructure, Spi FirstBit= SPI FirstBit MSBSPI InitStructure SPl CRCPolynomial =7;SPl Init(sPl1, &SPl Initstructure);4)当作为从机时,在GD32中,时钟信号必须为8的整数倍。例如:红色字体代码解决SPI_InitStructure SPl_ Direction =SPl_ Direction_ 2Lines_ Full Duplex;方法SPI InitStructure. SPl Mode= SPl Mode MasterSPI InitStructure SPSPi Data Size 8SPl InitStructure SPl CPOL= SPI CPOL High;SPI Init Structure. SPl CPHA SPI CPHA_ 2EdgeSPI Initstructure SPl NSS= SPI NSs SoftSPI Initstructure Spl BaudRatePrescaler= SPl BaudRatePrescaler 256SPI InitStructure. SPl FirstBit= SPl First Bit MSBSPl Initstructure SPl CRCPolynomial =7;SPI Init(SPI1, &SPl InitStructure)5)在GD32中,不能使用SPLS_FLAG_BSY该位来判断SP总线数据是否接收或发送完成12.看门狗1)进入SToP模式前打开看门狗,通过RTc的ALR唤醒后,程序会不断被复位的现像摧述WDG内部有个 Reload信号,KEY奇器写AAA会使其拉高,过段时间自动拉低。在拉底之前进入STOP状态会使 Reload信号一直为高,等到退出SToP后也保持为高,之后再写AAAA没有办法让 Reload产生上升沿,也就没办法更新计数器了解决方法「进STOP之前不要 Reload,也可以调整下程序的顺序,把WwDG的配置放到RIC配置之前,效果是一样的。

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • 51单片机智能扫地机器人
    智能清扫模式、红外蔽障、防跌落、电源管理模块、无线遥控模块、定时功能
    2020-12-05下载
    积分:1
  • SSH版图书管理系统
    完整版的SSH图书管理系统,运行环境亲自测试win7+Myeclipse8.5+Mysql2.5.9+tomcat6.0+360浏览器带有所需jar包及数据库sql文件。
    2021-05-07下载
    积分:1
  • 双馈风机建模
    关于双馈风机的建模与仿真的MATLAB代码。
    2020-11-28下载
    积分:1
  • NB-IOT R14协议
    NB-IOT R14主要协议,主要包括:ts_123002v140100p.pdf, ts_123040v140000p.pdf, ts_123048v050900p.pdf, ts_123122v140400p.pdf, ts_124008v140500p.pdf , ts_124011v140100p.pdf, ts_127007v140500p.pdf, ts_127010v140000p.pdf, ts_136201v140100p.pdf,ts_136211v140400p.pdf, ts_136212v140400p.pdf, ts_136213v140400p.pdf ,t
    2020-12-12下载
    积分:1
  • 完整的雷达系统仿真
    完整的雷达系统仿真MATLAB源代码包括天线设计,脉冲压缩等等
    2020-12-03下载
    积分:1
  • IMX6Q开发手册
    迅为-I.MX6开发板 Cortex-A9四核I.MX6Q,主频1G,2G内存,16G存储,支持4G全网通,GPS WIFI蓝牙模块,千兆以太网,摄像头,SATA等接口,多屏异显,双屏同显TOPET全能版用户使用手册www.topeetboard.com1.2.144G模块·1.2.15WIFI模块……421.2.16GPS模块431.2.17网口…………………441.2.18LCD接口………………………………………451.2.19HDMI接口…471.2.20OTG接口481.2.21RTC实时时钟……491.3配套资料…50131光盘资料……132网盘资料14网盘压缩包MD5值的使用…541.5开发板扩展口的原理图和PCB管脚对应方式介绍…………571.6串口硬件修改………………581.6.1Ⅵ13版本串口修改方法……1.62V2.0和V21版本串口修改方法581.7扩展文档1.7.17寸屏亮度调整……1.7.2屏幕亮度调整二iOP-MX6开发平台组装和初体验…602.1开发板的组裝60211控制台( console)串口60TOPET全能版用户使用手册www.topeetboard.com21.2屏幕的连接……………………………………………60213电源的连接672.2iTOP-iMX6启动模式…………682.21启动模式设置(拨码开关)682.2.2 uboot模式·····62.2.3文件系统模式23iTOP-iMX6开发平台初体验………………………702.31系统基本功能…232USB和OTG功能……75233网络设置和连接234多媒体2.3.5GPS功能(选配)…822.3.6游戏性能………………………………………8323.7蓝牙功能………着看垂垂…852.38SATA接口硬盘测试…862.39加速度计和电子罗盘〔选配件,该节仅作为参考)……8924扩展文档22.4.1迅为核心板装配指导922.4.2SIM卡座接触不良的解决办法…………9324.3VGA模块使用过程·垂垂着量D垂…………93三订TOP-MX6平台基本软件的安装3.1超级终端的安装和使用…………………94TOPET全能版用户使用手册www.topeetboard.com311安装USB转串口驱动94312超级终端的安装931.3超级终端的设置102314超级终端的系统配置………104315超级终端保存日志……10732安装虚拟机以及 Ubuntu12.042等软件11032.1虚拟机 VMware-workstation的安装11132.2虚拟机加载 Ubuntu12042镜像……………………………1223.2.3虚拟机安装 Ubuntu1204.2初始系统…垂.垂…………1263.2.4虚拟机 VMware- workstation联网以及基本设置133325安装和使用SSH软件13833 Ubuntu的基本操作1433.31初识 Ubuntu12.04.2以及 Ubuntu命令行………………………143332 Ubuntu中启用root用户………146333 Linux常用she!命令……………………………………………14833.4 Linux的重要命令 apt-get……154335安装和使用SSH软件……1623.3.6虚拟机 Ubuntu扩展硬盘空间…………………………1693.37虚拟机无法识别USB3.0的解决方法………1773.38U盘、TF卡与虚拟机连接…178339 Ubuntu图形界面无法登陆解决办法…1813.3.10虛拟机和主机之间共享文件夹…………………………………………183TOPET全能版用户使用手册www.topeetboard.com34vim编辑器鲁·非垂··垂·看垂布着幸……………1953.41安装vim编辑器……………1963.42Vim打开文件以及新建文件196343三种模式的切换·…198344Vim编辑器常用基本命令……20035 Source Insight的安装和使用…202351 Source Insight的安装···…………202352使用 Source Insight查看内核代码20336安卓ADB功能介绍…垂.垂……2113.61安卓ADB驱动的安装………2113.6.2ADB的基础知识…………2163.6.3常用的ADB命令2193.64ADB驱动安装常见问题解决办法汇总………………………2243.7代码对比器 TextDiff. exe22638二进制编辑器·………………………2283.81下载 Hex editorⅡ软件………2283.82 Hex editorⅡ软件使用……22939Win8下基础软件的安装和学习………………………230391超级终端的安装和使用……230392win8下安装虚拟机以及 Ubuntu12.04.2等软件………………………240393wn8下的 cmd.exe程序2413.10win81下基础软件的安装和学习243TOPET全能版用户使用手册www.topeetboard.com3.101Win81下PL2303USB转串口驱动安装…………2433102Win81下安卓ADB驱动的安装………………2493103win81下的 cmd. exe程序251311win10下基础软件的安装和学习251311.1win10USB转串口PL2303驱动安装…………………………2513112win10ADB驱动的安装……2583113Win10下的cmd.exe程序259312扩展文档………………2593121共享文件夹……………2593.122清除虚拟机安装残留…2603.123ssh常见问题以及解决方法2603.124无法使用ⅵ编辑器解决办法2603125修改adb调试权限………………………2603.126im详解文档260四iToP-iMX6开发板镜像的烧写………………………………2614.1OTG烧写环境2614.2烧写 Android…2644.3烧写QT……26944 uboot的 bootargs参数重置…………2734.5扩展文档…………2744.5.1TF卡开机自动烧写镜像275五系统开发板环境以及编译…………………………276TOPET全能版用户使用手册www.topeetboard.com51使用搭建好的编译环境·垂音普垂垂章非音音音音2765.1.1搭建好的编译环境·2765.1.2环境变量和 Javap路径的修改·…27752搭建系统基础编译环境…2785.2.1基础软件的安装……………278522交叉编译工具的安装…2815.2.3修改交叉编译工具的路径(修改环境变量2835.2.4安装JK…………………………2855.2.5安装库文件…2865.2.6降低GCC版本………28853 Android源码编译………2925.31 Android源码整体编译2925.32单独编译*……………………………………………………………29554Qt的编译29954.1 uboot编译……2995.4.2 kernel编译29954.3文件系统300六 Qtopia2.2.0开发环境搭建以及编译镜像30361编译器和基本库文件的安装……·看音非·垂30462 Qtopia22.0源文件和补丁文件…………………………30763库文件和编译 Qtopia22.030864 Qtopia系统源码编译翻看看番311TOPET全能版用户使用手册www.topeetboard.com七QtE的编译和使用说明……31371QtE47编译…………………………………3147.1.1QtE47编译器的安装3147.1.2QtE4.7的编译3167.2QtE5.7编译……………3177.2.1QtE57编译环境的两种搭建方式……318722 Ubuntu16.04系统编译 uboot和 kernel……………3257.23编译QtE5.7源码…………3287.2.4生成QtE5.7镜像………3327.3Qt/E4.7和 Qtopia的切换………3357.3.1设置开发板优先运行的文件系统………3357.3.2Qt/E4.7和 Qtopia2.2.0的触摸校准…3367.3.3系统运行后QtE4.7和 Qtopia2.2.0的切换……………3774QtE厍的编译配置选项简介…………………………3387.5QtE4.7根文件系统升级…………………3417.51QtE4.7连接WFI(MT6620的使用)…3417.5.2QtE4.7使用4G上网(EC20的使用)3427.6QtE5.7根文件系统升级………34276.1旋转触摸升级(20180511)…………342八基于 Linux-c的测试程序…34681测试程序的编译和运行3468.1.1编译环境的设置翻看看番346TOPET全能版用户使用手册www.topeetboard.com81.2编译 helloworlo…···347813上传 helloworld到开发板34881.4修改程序权限和运行 helloworld……34982Led灯的测试…3498.3 Buzzer蜂鸣器的测试…………35084串口收发测试352九定制 Linux内核··········:·*…3559.1缺省文件配置…3559.2驱动程序源代码的位置·35693 Menuconfig的用法………………………35894手动定制LnuX内核36794.1配置CPU平台文件368942内核编译器设置……6994.3小灯Led…3699.44蜂鸣器 Buzzer…9.4.5RS-485……………………3729.4.6RTC实时时钟3749.4.7RFID/RC522………375948I2C总线…………376949SPⅠ总线…37794.10CAN总线……37994.11串口虚拟控制台 console……38010
    2020-12-07下载
    积分:1
  • 地图缩软件domap
    地图综合,缩编软件,武汉大学产品,强烈推荐,很不错的哦!
    2020-11-29下载
    积分:1
  • 车辆动力学及控制.zip
    经典书籍中英文对照,车辆动力学及其控制,Vehicle dynamics and control, 作者Rajesh Rajamani,2006年第一版 本书全面覆盖了在车辆控制系统模型的开发过程中使用到的车辆控制系统及动力学模型,包括巡航控制,自适应巡航控制,ABS, 自动车道保持,自动高速系统,航向角稳定控制,引擎控制,被动主动和半主动悬挂,轮胎-路面摩擦系数估计,防倾翻及混合电力车辆。 仅供阅览
    2021-05-06下载
    积分:1
  • 六子冲棋(博弈序设计教)(原创)源代码
    六子冲棋(博弈程序设计教程)www.leilei.name原创源代码
    2020-11-30下载
    积分:1
  • ABAQUS的混凝土数值分析与模拟
    很好的ABAQUS资料,介绍混凝土的,用来模拟混凝土结构的受拉受压和开裂行为的,介绍的很详细
    2020-11-28下载
    积分:1
  • 696518资源总数
  • 105877会员总数
  • 14今日下载