GD32F10x到GD32F1x0-软件移植说明_第1页
GD32F10x到GD32F1x0-软件移植说明_第2页
GD32F10x到GD32F1x0-软件移植说明_第3页
GD32F10x到GD32F1x0-软件移植说明_第4页
GD32F10x到GD32F1x0-软件移植说明_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GD32F10 x到 GD32F1x0-软件移植 说明 GD32F10 x到 GD32F1x0的软件移植说明 1、 移植前准备工作。 将原有的 ST的 10 x 的库替换成我们 GD的 库(可以从 demo中找到),包括系统头文件、外 设库文件以及启动文件等, 当前给客户提供的库 都是以 stm32f0 xx 命名,这是我们在 ST 的 10 x 和 0 xx 的外设库的基础上修改的, 完全可以正常 使用,后续我们会推出自己的库。开发环境的 device 选择和 flash 配置可以有两种方式,一 种方式是直接 device 中选择 ST的 STM32F100C,8 flash 配置选择 ST

2、的 64K 的 flash 配置文件; 另一种方式是使用我们提供的 GD的 GD32F1x0的 device (需要事先在 keil 安装目录下添加我们 GD的配置文件),flash 配置选择我们 GD的 64K flash 配置文件,其他配置可保持与之前相同不 用改动。如果选择 GD的配置文件,需要操作的 步骤如下 (假如 keil 的安装路径为: C:Keil ): 拷贝 UV4.cdb 到 C:KeilUV4 。 拷 贝 GD32F1x0_64.FLM 到 C:KeilARMFlash 。 C:Keil 下创建文件夹命名“ GD” 。 GD 文 件 夹 下 创 建 文 件 夹 命 名 “

3、GD32F1x0”。 C:KeilARMSFDGDGD32F1x0。 这样,在 keil 的 device 界面,就可以找到 GD32F1x0的 device ,如图 1.1 所示。 拷 贝 GD32F1x0.SFR 到 图 1.1 选择 GD32F1x0的 device 图 1.2 flash 配置文件及路径说明 2、 所有模块的 GPIO初始化部分。 1x0相对于 10 x 系列最大的改动在 GPIO部分, 主要有以下三点: 2.1 GPIO 时钟总线配置区别。 GPIOA BCDF的时钟的时候就要注意, GPIOA时钟: 下配 之前 10 x 系列的 GPIO ABCDF都挂在了 APB

4、 总线上,而 1x0 的 GPIO口都挂在了 AHB总线上, 所以在打开 如下: 比如使能 10 x RCC_APB2PeriphClockCmd(RCC_APB2Periph PIOA,ENABLE); 1x0 下 需 改 为 : RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPI OA,ENABLE); GPIOB、C、 D、 F的时钟使能以此类推。 2.2 GPIO 口复用配置区别。 1x0 系列和 10 x 系列的 IO 口复用配置模式不 同。具体对比说明如下: 比如 USART1的 GPIO口配置,可以映射到 PA9 和 PA10,也可以映射到 PB6 和

5、 PB7。 先使能 USART、1 GPIOA和 AFIO 的时 2.2.1 10 x 配置 USART1的 GPIO口,大概过程 如下(以 PA9和 PA10为例): 2.2.1.1 首 钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_U SART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_AP1Bx02P无er需iph_ GPIOA , ENABLE); 复用模式 RCC_APB2PeriphClockCmd(RCC_APB2Periph_A FIO , ENABLE); 2.2.1.2 然后配置 PA9和 PA10的模式

6、。 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP; GPIO_Init(GPIOA, GPIO_InitStructure.GPIO_Pin= GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING; GPIO_Init(G

7、PIOA, 2.2.1.3 最后配置串口相应参数,这部分和 1x0 完全相同,就不列出来了。 2.2.2 1x0 配置 USART1的 GPIO口,大概过程 如下(以 PA9和 PA10为例): 2.2.1.1 首先使能 USART、1 GPIOA的时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_U SART1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GP IOA , ENABLE); 2.2.1.2 然后配置 PA9和 PA10的模式。 GPIO_InitTypeDef GPIO_InitStructur

8、e; GPIO_PinAFConfig( G复P用IO模A 式, GPIO_PinSource9, GPIO_AF_1 ); GPIO_PinAFConfig( GPIOA , GPIO_PinSource10, P此IO处_不P需 GPIO_AF_1 ); 要再配置 GPIO_Pin_9 | in GPIO_InitStructure.G GPIO_Pin_10; ode GPIO_InitStructure.GPIO_M = GPIO_Mode_AF; GPIO_InitStructure.GPIO_S peed = GPIO_Speed_50MHz; GPIO_InitStructure

9、.GPIO_O Type = GPIO_OType_PP; GPIO_InitStructure.GPIO_P uPd = GPIO_PuPd_NOPULL; GPIO_Init( GPIOA , 如果将 USART1映射到 PB6和 PB7,则复用模 式配置如下: GPIO_PinAFConfig( GPIOB , GPIO_PinSource6, GPIO_AF_0 ); GPIO_PinAFConfig( GPIOB GPIO_PinSource7, GPIO_AF_0 ); 至于为什么 PA9、PA10 映射到 GPIO_AF_,1 PB6和 PB7映射到 GPIO_AF_,0 需要查

10、看 1x0 的 datasheet ,如下图: 图 2.1 PB 复用功能说明 所以,关于 GPIO 口的复用配置都需要参考 datasheet 来完成。 2.2.2.3 最后配置串口相应参数,这部分和 10 x 完全相同,就不列出来了。 2.3 GPIO 口模式配置 10 x系列的 GPIO口有 8种模式,如下图: 图 2.2 10 x 系列 GPIO口 8 种模式 而 1x0 系列的 GPIO口配置在 10 x 系列的基础 上,按输入输出、推挽开漏、上拉下拉模式分成 了三个结构体, 相较 10 x 系列而言,组合方式更 加自由,如下图: 图 2.3 1x0 系列 GPIO 口模式 例如:

11、10 x 系列配置某个 GPIO口为推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; 1x0 系列中,就变成了两条语句: GPIO_InitStructure.GPIO_Mode GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; 又如:10 x 系列配置某个 GPIO口为下拉输入: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ; 1x0 系列中,就变成了: GPIO_InitStructure.GPIO_Mode GP

12、IO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; 3、 外设中断部分 1x0 相对于 10 x 系列增加了一些模块(如 SYSCF、GTSC、CEC等),删减了一些模块 (如 1x0 只有一个 ADC、最多两路 DMA等),因此 1x0 的 中断向量表的名称包括位置相对于 10 x 系列都 有很大改变。很多客户都反映移植中经常遇到的 问题就是无法进入中断。 10 x和 1x0系列的中断 向量表的对比如下: 表 3.1 10 x 和 1x0 中断向量表对比说明 移植过程中,要注意的一点通常是外设中断 名称的修改,举几个例子: 3

13、.1 TIM1,如果用作 6 路 PWM输出,需要在中断 处理函数的头文件(比如 stm32f0 xx_it.h )中, 把原来的 TIM1 的中断函数声明改为: void TIM1_BRK_UP_TRG_COM_IRQHandler (void);在 中断处理函数源文件(比如 stm32f0 xx_it.c ) 中,把 TIM1 的中断函数名称也改为: void TIM1_BRK_UP_TRG_COM_IRQHand(vleorid ) /* 原来的代码 */ 然后在定义 TIM1 中断分组优先级的相应代码 里(一般是在 main 函数中),把中断通道改成如 下设置: NVIC_InitSt

14、ructure1.NVIC_IRQChannel=TIM1_ BRK_UP_TRG_COM_IRQn; 一般改这三个地方应该就可以正常进入中断 了。剩下的外设以此类推。 3.2 如果有 USART1中断,三个地方分别改为: void USART1_IRQHandler (void); void USART1_IRQHandler (void) /* 原来的代码 */ NVIC_InitStructure1.NVIC_IRQChannel=USART 1_IRQn; 3.3 如果有 DMA中断,如果是通道 1,三个地方 分别改为: void DMA1_Channel1_IRQHandler (v

15、oid); void DMA1_Channel1_IRQHandler (void) /* 原来的代码 */ NVIC_InitStructure1.NVIC_IRQChannel=DMA1_ Channel1_IRQn; 3.4 如果有 ADC中断,三个地方分别改为: void ADC1_COMP_IRQHandler (void); void ADC1_COMP_IRQHandler (void) /* 原来的代码 */ NVIC_InitStructure1.NVIC_IRQChannel=ADC1_ COMP_IRQn; 3.5 如果有 TIM2 中断,三个地方修改如下: void T

16、IM2_IRQHandler (void); void TIM2_IRQHandler (void) /* 原来的代码 */ NVIC_InitStructure1.NVIC_IRQChannel=TIM2_ IRQn; 4、 外中断线 EXIT 部分 以配置 PB13的下降沿中断为例: 10 x 的配置如下: EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig( GPIO_PortSourceGPIOB, GPIO_PinSource13 ); EXTI_ClearITPendingBit( EXTI_Line13 ); EXTI

17、_InitStructure.EXTI_Line = EXTI_Line13; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ; EXTI_InitStructure.EXTI_LineCmd = ENABLE; 1x0 的外中断 EXTI_Init( 1x0 的配置如下:线的配置是在 EXTI_InitTypeDef EXTI_InitStructure; SYSCFG模块中 RCC_APB2PeriphClockCmd(RC

18、C_APB2Periph_SYS CFG, ENABLE); SYSCFG_EXTILineConfig( EXTI_PortSourceGPI OB, EXTI_PinSource13); EXTI_ClearITPendingBit( EXTI_Line13 ); EXTI_InitStructure.EXTI_Line = EXTI_Line13; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ; EXTI_InitStr

19、ucture.EXTI_LineCmd = ENABLE; EXTI_Init( 5、 DMA模块 1x0 和 10 x 相比,DMA模块的配置上完全相同, 唯一有区别的是外设的 DMA通道可能略有差别。 下面两张图对比了二者 DMA1映射的区别: 图 5.1 10 x 系列 DMA1外设通道一览 图 5.2 1x0 系列的 DMA外设通道一览 注:括号里的( 1)、(2)说明如下: 1) SYSCFG_R1寄存器中的对应重映射控制 位被清 0 时,此请求被映射到该通道。 2) SYSCFG_R1寄存器中的对应重映射控制 位被置 1 时,此请求被映射到该通道。 其中( 1)为缺省设置 DMA模

20、块的区别反映在软件代码是就是通道配置的区别,例如 USART1的 Rx在 10 x 系列中在 DMA1的通道 5,但是在 1x0 系列中, 缺省模式下 映射到 DMA1的通道 3。如果使用 USART1的 DMA 接收方式,相关配置的修改如下: 10 x 中 : DMA_Init(DMA1_Channel5, DMA_Cmd(DMA1_Cha nnel5, ENABLE); 1x0 中 : DMA_Init(DMA1_Channel3, DMA_Cmd(DM A1_Channel3, ENABLE); 6、 RCC模块 系统时钟配置过程中,需要注意, GD32F1x0 的 APB1 和 APB2 总线的最大时钟频率都是 72MHz,而 10 x 系列的 APB1总线的最大时钟频 率只有 AHB的一半,APB2总线的最大时钟频率

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论