搜集到的一些资料:

RTT提供的F303的库
GD32 BSP制作1
RTT制作GD32系列BSP
移植RTT到GD32
兆易创新资料下载
GD32标准库移植 (兆易创新官网只提供了标准库) 标准库点灯
GD32芯片包下载 (和固件库包不一样)下载慢的话也可以官网中找GD32F30x AddOn
GITHUB上的RTT和GD32的BSP制作
GD32F305的例程

其实看完上面这些也没必要继续向下看了·······

下面是记录的一些技巧和过程细节

一、新建工程及编译

将下载下来的keil中的芯片包GigaDevice.GD32F30x_DFP.2.2.0.pack,安装上,否则新建项目的时候没办法选择芯片型号

然后GD32F30x_Firmware_Library_V2.1.3\GD32F30x_Firmware_Library_V2.1.3\Template\Keil_project中keil工程,不是为了用它,主要是为了在新建工程的时候复制一下它上面的路径,如下图

还有一些配置

至于上图中的包怎么选,在开始提到的链接里面有

还有一些文件夹的新建及文件新加,如下图

这样能看到文件的命名和分类了,当然也可以按照自己的风格进行重建,鼠标放到文件上,还可以显示文件的位置,便于下图添加文件(右击选中工程,选择Manage Project Items出来)

文件添加完成后,注意把Utilities文件夹下面的gd32f307c_lcd_eval.c屏蔽掉,否则找不到里面头文件,其实也能手动添加一下,但是我添加完成以后看了一下源文件,里面只是一些lcd相关的文件,一般用不到,屏蔽方法如下图,右击选择属性后,把include in target build前面的勾去掉就可以了

上面弄完点击编译按说可以通过了,但是main文件里面的好多函数找不到,应该是根据提供的标准库函数又向上封装了一层,所以就替换了,没有用他的main里面的内容

小技巧,替换他关于串口相关的函数时,可以去GD32F30x_Firmware_Library_V2.1.3\GD32F30x_Firmware_Library_V2.1.3\Examples\USART这个路径下面查看例程源文件,其它外设添加方法类似

下面是实测可以编译通过的led闪烁和串口打印示例

#include "gd32f30x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "gd32f30x_gpio.h"void led_spark(void)
{static __IO uint32_t timingdelaylocal = 0U;if(timingdelaylocal){if(timingdelaylocal < 500U){gpio_bit_set(GPIOC, GPIO_PIN_6);}else{gpio_bit_reset(GPIOC, GPIO_PIN_6);}timingdelaylocal--;}else{timingdelaylocal = 1000U;}
}void GPIO_Config(void)
{rcu_periph_clock_enable(RCU_GPIOC);/*LED*/gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
}void USART_Config(void)
{/* enable GPIO clock */rcu_periph_clock_enable(RCU_GPIOA);/* enable USART clock */rcu_periph_clock_enable(RCU_USART0);/* connect port to USARTx_Tx */gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);/* connect port to USARTx_Rx */gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);/* USART configure */usart_deinit(USART0);usart_baudrate_set(USART0, 115200U);usart_receive_config(USART0, USART_RECEIVE_ENABLE);usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);usart_enable(USART0);printf("a usart transmit test example!");
}int main(void)
{/* configure systick */systick_config();/* initilize the LEDs, USART and key */GPIO_Config();USART_Config();/* print out the clock frequency of system, AHB, APB1 and APB2 */printf("\r\nCK_SYS is %d", rcu_clock_freq_get(CK_SYS));printf("\r\nCK_AHB is %d", rcu_clock_freq_get(CK_AHB));printf("\r\nCK_APB1 is %d", rcu_clock_freq_get(CK_APB1));printf("\r\nCK_APB2 is %d", rcu_clock_freq_get(CK_APB2));while (1){led_spark();delay_1ms(1);}
}/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{usart_data_transmit(USART0, (uint8_t)ch);while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));return ch;
}

二、仿真及调试查看

一仿真就报了一个看似很正常的错误,如下图(大概意思就是没有那个寄存器读写的权限)

网上一查一大堆,都说改一下下图指的位置的内容就行

我按照网上说的把里面的数都快穷举了一遍,也是不行,后来发现他们都没说到根上,根就是keil5不支持M4内核的设备,和同事核实了一下,他也是这么说的,然后根据这个线索找了个靠谱答案
官网信息参考

找到原因了,接下来就找解决方法,不能别人说不行就不行啊,中间又扒拉了一下gd32官网提供的工具和第三方在线仿真工具,无果

找找找,找到一个看似可以解决的答案

试了大佬方法的第二种,不要问为什么没试第一种(已经穷举了)
倒是不出现开始的错误了,但是总是卡到一段没编译的程序里面,然后看了一下那段程序,是因为宏定义导致变灰的,所以就把#define __SYSTEM_CLOCK_IRC8M (uint32_t)(__IRC8M)放开了,然后把//#define __SYSTEM_CLOCK_120M_PLL_HXTAL (uint32_t)(120000000)屏蔽了(修改了一下时钟源),现在错误如下图(一直卡在这里出不去):

然后想着试试大佬的第三个方法,弄了一下,程序直接一仿真就跑起来来了,不过还是卡在上图那个地方,貌似情况更差了,然后试一下改改.ini文件的寄存器映射内容,去看数据手册

按着手册改的文件如下,还发现gd32f305咋没有AHB2啊
map 0x40000000, 0x4000FFFF read write // APB1
map 0x40010000, 0x400157FF read write // APB2
map 0x40018000, 0x5003FFFF read write // AHB1
map 0x60000000, 0xA0000FFF read write // AHB3

然后发现没啥用,看来不是这个原因啊,不过映射的确不一样,往好处想这是原因之一吧

现在有一瞬间有个想法,要不要把第一步穷尽的做法再搞一遍呢(先找找原因吧还是)

看了一下程序,卡在这好像是因为内部时钟一直不稳定,去了试试呢
去掉之后不卡在那了,但是卡在下面的地方了

找原因的过程在arm社区找到了下面的一个会议介绍,有兴趣的可以点击观看

再接着看,去网上查了一下,这个问题是因为串口的时钟不稳定导致的,这倒是符合前面的倒数第二个问题,所以就把串口相关的去了,奇迹出现,可以仿真了

下一步就是看引脚的变化了,虽然看不了串口,看看模拟出来的引脚电平也能解决一部分逻辑啊

还没看那,又发现一个错误,如下图

查资料的时候又发现个有意思的事情,解决问题竟然还能发论文

上面问题在文章里面找到了原因,是注意映射空间不要超过0x08000000,否则调试时会提示错误:“*** error 129: MapMemmap size truncated to 128MB”,无解

接着看io口电平,一直显示undefined identifier,就算了,直接在控制引脚那里放个全局变量,然后如下图在逻辑分析器里面看变化就行了

上图可以看出时间也是差不多的

关于中断和其它外设就不过多介绍了,感兴趣的可以看大佬们写的文章

从0使用keil5软件仿真调试GD32F305相关推荐

  1. MDK stm32软件仿真调试

    MDK stm32软件仿真调试 选择好单片机型号 配置Debug选项 选择好单片机型号 我选的STM32F103ZET6型号,大家可以根据自己手上stm32开发板的型号来选择. 外部晶振频率的选择:8 ...

  2. 汇编语言笔记-keil5软件仿真及调试

    目录 keil5调试功能 软件仿真设置 硬件调试设置 调试方法 调试选项及介绍 调试窗口 Command Disassembly Symbols Registers Call Stack(+Local ...

  3. Keil5的仿真调试

    Keil5基本的仿真调试操作: 首先点击魔法棒 然后输入你板子上所用的晶振,然后进入debug: 然后选择 Use Simulator,然后点击OK: 然后点击调试按钮: 然后就会出现调试页面: 我这 ...

  4. KEIL5软件仿真支持的器件

    问题的提出 用KEIL进行软件仿真,想观察一下处理器STM32F091RCY的I2C和DAC引脚输出的波形,发现无法向波形中添加信号,如下图所示 当在命令行中输入 dir vtreg 指令时,仅仅能够 ...

  5. 【51】keil5软件仿真基本操作

    选择软件仿真 开始仿真 点击设置断点 运行到断点 查看变量的值 选中要查看的变量 右键添加 i的值为0 更改断点并运行 i的值为1 查看内存 找到memory窗口 没有就重新打开 输入x的地址:D:0 ...

  6. keil5软件仿真出现unknown signal解决方法。

    用keil uvision5软件仿真时,MDK Logic Analyzer添加current logic analyzer signals时总是显示Unknown Signal? 解决方法如下: D ...

  7. KEIL5软件仿真出现*** error 65: access violation at 0xE0001004 : no ‘read‘ permission的解决方法

    故障图: 解决方法: 第一步: 设置下面的"Dialog DLL"项为"DARMSTM.DLL"和"TARMSTM.DLL":paramet ...

  8. 串行通信 软件仿真STM32与74LS164通信

    1.串行通信 2.常见的4种串行通信标准 3.对74LS164芯片的介绍 74LS164:串行转并行芯片,内部是1个8位的移位寄存器组成,由8个D触发器组成 缺点是:不带锁存寄存器,移位寄存器移位的过 ...

  9. 【工具使用】Keil5软件使用-进阶调试篇

    一.概述     本文面向已经懂得软件基本操作的职业老手,如果是未使用过该软件的小鲜肉,请移步基础篇.这里以STM32芯片为例对工具进行讲解,其他品牌的芯片在调试方面上可能存在差异. 二.软件说明   ...

最新文章

  1. monocle3包的安装
  2. AngularJS指令封装高德地图组件
  3. php扩展管理配置信息,三方插件配置文件说明
  4. Kolor Panotour Pro 使用方法
  5. equals方法的重写
  6. 向Access中插入数据报“INSERT INTO 语句的语法错误” 解决
  7. 《硝烟中的Scrum和XP》书摘(1)
  8. 多租户saas 架构_[译/注] Force.com 多租户互联网应用开发平台的设计
  9. 如何设置Eclipse新建项目的默认编码方式
  10. 程序员面试金典——17.6最小调整有序
  11. java.lang.UnsupportedOperationException: This parser does not support specification “null“ version “
  12. 谈ISO9000-3内容及其与CMM关系
  13. 【无人机系统】四轴飞行器及其UAV飞控系统 - 桂林电子科技大学信息科技学院 电子工程系(一)
  14. 好用到爆的桌面电子教鞭zoomit
  15. python调包师_为“Python调包侠” 画像
  16. Java后端春秋招之旅
  17. Intellij (IDEA) 学生认证全流程
  18. 如果你画了一个圆被挤扁了
  19. OpenGL-绘制旋转立方体
  20. BP神经网络的数学表达式

热门文章

  1. 航班信息的查询与检索Java,航班信息的查询与检索
  2. linux和windows下分别如何查看电脑是32位的还是64位?
  3. 多功能无线测量仪的设计与制作
  4. 团伙分类:有一份数据部分如下,比如:刘备和关羽有关系,说明他们是一个团伙
  5. 业务流程图与数据流图的对比
  6. 基金从业资格考试总结
  7. Freemarker模板---引擎学习
  8. Proteus与Keil联调 ARM STM32流水灯
  9. CPU的主频/核心数
  10. Linux 系统设置 : hwclock 命令详解