GD32F10x到GD32F1x0软件移植说明文档格式.docx

上传人:b****2 文档编号:3406934 上传时间:2023-05-01 格式:DOCX 页数:15 大小:503.06KB
下载 相关 举报
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第1页
第1页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第2页
第2页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第3页
第3页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第4页
第4页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第5页
第5页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第6页
第6页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第7页
第7页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第8页
第8页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第9页
第9页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第10页
第10页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第11页
第11页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第12页
第12页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第13页
第13页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第14页
第14页 / 共15页
GD32F10x到GD32F1x0软件移植说明文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

GD32F10x到GD32F1x0软件移植说明文档格式.docx

《GD32F10x到GD32F1x0软件移植说明文档格式.docx》由会员分享,可在线阅读,更多相关《GD32F10x到GD32F1x0软件移植说明文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

GD32F10x到GD32F1x0软件移植说明文档格式.docx

⑤拷贝GD32F1x0.SFR到C:

\Keil\ARM\SFD\GD\GD32F1x0。

这样,在keil的device界面,就可以找到GD32F1x0的device,如图1.1所示。

 

图1.1选择GD32F1x0的device

图1.2flash配置文件及路径说明

2、所有模块的GPIO初始化部分。

1x0相对于10x系列最大的改动在GPIO部分,主要有以下三点:

2.1GPIO时钟总线配置区别。

之前10x系列的GPIOABCDF都挂在了APB2总线上,而1x0的GPIO口都挂在了AHB总线上,所以在打开GPIOABCDF的时钟的时候就要注意,如下:

比如使能GPIOA时钟:

10x下配置为:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

1x0下需改为:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);

GPIOB、C、D、F的时钟使能以此类推。

2.2GPIO口复用配置区别。

1x0系列和10x系列的IO口复用配置模式不同。

具体对比说明如下:

比如USART1的GPIO口配置,可以映射到PA9和PA10,也可以映射到PB6和PB7。

2.2.110x配置USART1的GPIO口,大概过程如下(以PA9和PA10为例):

2.2.1.1首先使能USART1、GPIOA和AFIO的时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

2.2.1.2然后配置PA9和PA10的模式。

GPIO_InitTypeDefGPIO_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;

2.2.1.3最后配置串口相应参数,这部分和1x0完全相同,就不列出来了。

2.2.21x0配置USART1的GPIO口,大概过程如下(以PA9和PA10为例):

2.2.1.1首先使能USART1、GPIOA的时钟。

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);

 

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,&

如果将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.1PB复用功能说明

所以,关于GPIO口的复用配置都需要参考datasheet来完成。

2.2.2.3最后配置串口相应参数,这部分和10x完全相同,就不列出来了。

2.3GPIO口模式配置

10x系列的GPIO口有8种模式,如下图:

图2.210x系列GPIO口8种模式

而1x0系列的GPIO口配置在10x系列的基础上,按输入输出、推挽开漏、上拉下拉模式分成了三个结构体,相较10x系列而言,组合方式更加自由,如下图:

图2.31x0系列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.110x和1x0中断向量表对比说明

移植过程中,要注意的一点通常是外设中断名称的修改,举几个例子:

3.1TIM1,如果用作6路PWM输出,需要在中断处理函数的头文件(比如stm32f0xx_it.h)中,把原来的TIM1的中断函数声明改为:

voidTIM1_BRK_UP_TRG_COM_IRQHandler(void);

在中断处理函数源文件(比如stm32f0xx_it.c)中,把TIM1的中断函数名称也改为:

voidTIM1_BRK_UP_TRG_COM_IRQHandler(void)

{

/*原来的代码*/

}

然后在定义TIM1中断分组优先级的相应代码里(一般是在main函数中),把中断通道改成如下设置:

NVIC_InitStructure1.NVIC_IRQChannel=TIM1_BRK_UP_TRG_COM_IRQn;

一般改这三个地方应该就可以正常进入中断了。

剩下的外设以此类推。

3.2 

如果有USART1中断,三个地方分别改为:

voidUSART1_IRQHandler(void);

voidUSART1_IRQHandler(void)

NVIC_InitStructure1.NVIC_IRQChannel=USART1_IRQn;

3.3如果有DMA中断,如果是通道1,三个地方分别改为:

voidDMA1_Channel1_IRQHandler(void);

voidDMA1_Channel1_IRQHandler(void)

NVIC_InitStructure1.NVIC_IRQChannel=DMA1_Channel1_IRQn;

3.4如果有ADC中断,三个地方分别改为:

voidADC1_COMP_IRQHandler(void);

voidADC1_COMP_IRQHandler(void)

NVIC_InitStructure1.NVIC_IRQChannel=ADC1_COMP_IRQn;

3.5如果有TIM2中断,三个地方修改如下:

voidTIM2_IRQHandler(void);

voidTIM2_IRQHandler(void)

NVIC_InitStructure1.NVIC_IRQChannel=TIM2_IRQn;

4、外中断线EXIT部分

以配置PB13的下降沿中断为例:

10x的配置如下:

EXTI_InitTypeDefEXTI_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;

EXTI_Init(&

EXTI_InitStructure);

1x0的配置如下:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource13);

5、DMA模块

1x0和10x相比,DMA模块的配置上完全相同,唯一有区别的是外设的DMA通道可能略有差别。

下面两图对比了二者DMA1映射的区别:

图5.110x系列DMA1外设通道一览

图5.21x0系列的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_Cmd(DMA1_Channel3,ENABLE);

6、RCC模块

系统时钟配置过程中,需要注意,GD32F1x0的APB1和APB2总线的最大时钟频率都是72MHz,而10x系列的APB1总线的最大时钟频率只有AHB的一半,APB2总线的最大时钟频率为AHB的时钟频率。

这种区别反映在代码中如下:

10x系列,系统时钟配置文件(system_stm32f10x.c)中,SetSysClockTo72()函数里,PCLK1和PCLK2的配置代码如下:

/*HCLK=SYSCLK*/

RCC->

CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;

/*PCLK2=HCLK*/

CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;

/*PCLK1=HCLK*/

CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV2;

1x0系列相应位置配置为:

/*HCLK=SYSCLK*/

GCFGR|=(uint32_t)RCC_GCFGR_AHBPS_DIV1;

GCFGR|=(uint32_t)RCC_GCFGR_APB2PS_DIV1;

RCC->

GCFGR|=(uint32_t)RCC_GCFGR_APB1PS_DIV1;

在3205A版的芯片中,USART1的波特率会受到PCLK1的影响,如果不把PCLK1改为HCLK不分频,会出现实际得到的串口波特率与预期不符,也即出现串口通讯乱码现象。

以上只是客户常用的模块的软件移植说明,可能还不够全面,欢迎大家积极补充。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2