GD32F10 x到GD32F1x0-软件移植说明.docx_第1页
GD32F10 x到GD32F1x0-软件移植说明.docx_第2页
GD32F10 x到GD32F1x0-软件移植说明.docx_第3页
GD32F10 x到GD32F1x0-软件移植说明.docx_第4页
GD32F10 x到GD32F1x0-软件移植说明.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

GD32F10x到GD32F1x0的软件移植说明1、 移植前准备工作。将原有的ST的10x的库替换成我们GD的库(可以从demo中找到),包括系统头文件、外设库文件以及启动文件等,当前给客户提供的库都是以stm32f0xx命名,这是我们在ST的10x和0xx的外设库的基础上修改的,完全可以正常使用,后续我们会推出自己的库。开发环境的device选择和flash配置可以有两种方式,一种方式是直接device中选择ST的STM32F100C8,flash配置选择ST的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 文件夹下创建文件夹命名“GD32F1x0”。 拷贝 GD32F1x0.SFR 到 C:KeilARMSFDGDGD32F1x0。这样,在keil的device界面,就可以找到GD32F1x0的device,如图1.1所示。图1.1 选择GD32F1x0的device图1.2 flash配置文件及路径说明2、 所有模块的GPIO初始化部分。1x0相对于10x系列最大的改动在GPIO部分,主要有以下三点:2.1 GPIO时钟总线配置区别。之前10x系列的GPIO ABCDF都挂在了APB2总线上,而1x0的GPIO口都挂在了AHB总线上,所以在打开GPIO ABCDF的时钟的时候就要注意,如下:比如使能GPIOA时钟:10x下配置为:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);1x0下需改为:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);GPIOB、C、D、F的时钟使能以此类推。2.2 GPIO口复用配置区别。1x0系列和10x系列的IO口复用配置模式不同。具体对比说明如下:比如USART1的GPIO口配置,可以映射到PA9和PA10,也可以映射到PB6和PB7。2.2.1 10x配置USART1的GPIO口,大概过程如下(以PA9和PA10为例):2.2.1.1 首先使能USART1、GPIOA和AFIO的时钟。RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);复用模式配置1x0无需这一步RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);2.2.1.2 然后配置PA9和PA10的模式。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_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);2.2.1.3 最后配置串口相应参数,这部分和1x0完全相同,就不列出来了。2.2.2 1x0配置USART1的GPIO口,大概过程如下(以PA9和PA10为例):2.2.1.1 首先使能USART1、GPIOA的时钟。RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA , ENABLE); 2.2.1.2 然后配置PA9和PA10的模式。GPIO_InitTypeDef GPIO_InitStructure;复用模式配置GPIO_PinAFConfig( GPIOA , GPIO_PinSource9, GPIO_AF_1 ); GPIO_PinAFConfig( GPIOA , GPIO_PinSource10, GPIO_AF_1 ); 此处不需要再配置PA10为浮空输入了GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init( GPIOA , &GPIO_InitStructure);如果将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,需要查看1x0的datasheet,如下图:图2.1 PB复用功能说明所以,关于GPIO口的复用配置都需要参考datasheet来完成。2.2.2.3 最后配置串口相应参数,这部分和10x完全相同,就不列出来了。2.3 GPIO口模式配置10x系列的GPIO口有8种模式,如下图:图2.2 10x系列GPIO口8种模式而1x0系列的GPIO口配置在10x系列的基础上,按输入输出、推挽开漏、上拉下拉模式分成了三个结构体,相较10x系列而言,组合方式更加自由,如下图:图2.3 1x0系列GPIO口模式例如:10x系列配置某个GPIO口为推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;1x0系列中,就变成了两条语句:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;又如:10x系列配置某个GPIO口为下拉输入:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ;1x0系列中,就变成了:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;3、 外设中断部分1x0相对于10x系列增加了一些模块(如SYSCFG、TSC、CEC等),删减了一些模块(如1x0只有一个ADC、最多两路DMA等),因此1x0的中断向量表的名称包括位置相对于10x系列都有很大改变。很多客户都反映移植中经常遇到的问题就是无法进入中断。10x和1x0系列的中断向量表的对比如下:表3.1 10x和1x0中断向量表对比说明移植过程中,要注意的一点通常是外设中断名称的修改,举几个例子:3.1 TIM1,如果用作6路PWM输出,需要在中断处理函数的头文件(比如stm32f0xx_it.h)中,把原来的TIM1的中断函数声明改为:void TIM1_BRK_UP_TRG_COM_IRQHandler (void); 在中断处理函数源文件(比如stm32f0xx_it.c)中,把TIM1的中断函数名称也改为:void TIM1_BRK_UP_TRG_COM_IRQHandler (void)/*原来的代码*/然后在定义TIM1中断分组优先级的相应代码里(一般是在main函数中),把中断通道改成如下设置:NVIC_InitStructure1.NVIC_IRQChannel=TIM1_BRK_UP_TRG_COM_IRQn; 一般改这三个地方应该就可以正常进入中断了。剩下的外设以此类推。3.2 如果有USART1中断,三个地方分别改为:void USART1_IRQHandler (void);void USART1_IRQHandler (void)/*原来的代码*/NVIC_InitStructure1.NVIC_IRQChannel=USART1_IRQn;3.3 如果有DMA中断,如果是通道1,三个地方分别改为:void DMA1_Channel1_IRQHandler (void);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 TIM2_IRQHandler (void);void TIM2_IRQHandler (void)/*原来的代码*/NVIC_InitStructure1.NVIC_IRQChannel=TIM2_IRQn;4、 外中断线EXIT部分以配置PB13的下降沿中断为例:10x的配置如下:EXTI_InitTypeDef EXTI_InitStructure;GPIO_EXTILineConfig( GPIO_PortSourceGPIOB, GPIO_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_InitStructure.EXTI_LineCmd = ENABLE;1x0的外中断线的配置是在SYSCFG模块中完成,而10x直接在GPIO模块完成EXTI_Init(&EXTI_InitStructure);1x0的配置如下:EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);SYSCFG_EXTILineConfig( EXTI_PortSourceGPIOB, 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_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);5、 DMA模块1x0和10x相比,DMA模块的配置上完全相同,唯一有区别的是外设的DMA通道可能略有差别。下面两张图对比了二者DMA1映射的区别:图5.1 10x系列DMA1外设通道一览图5.2 1x0系列的DMA外设通道一览注:括号里的(1)、(2)说明如下:(1) SYSCFG_R1寄存器中的对应重映射控制位被清0时,此请求被映射到该通道。(2) SYSCFG_R1寄存器中的对应重映射控制位被置1时,此请求被映射到该通道。其中(1)为缺省设置。DMA模块的区别反映在软件代码是就是通道配置的区别,例如USART1的Rx在10x系列中在DMA1的通道5,但是在1x0系列中,缺省模式下映射到DMA1的通道3。如果使用USART1的DMA接收方式,相关配置的修改如下:10x中:DMA_Init(DMA1_Channel5, &DMA_InitStructure); DMA_Cmd(DMA1_Channel5, ENABLE);1x0中:DMA_Init(DMA1_Channel3, &DMA_InitStructure); DMA_Cmd(DMA1_Channel3, ENABLE);6、 RCC模块系统时钟配置过程中,需要注意,GD32F1x0的APB1和APB2总线的最大时钟频率都是72MHz,而10x系列的APB1总线的最大时钟频率只有AHB的一半,APB2总线的最大

温馨提示

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

评论

0/150

提交评论