-
GD32F10x
到
GD32F1x0
的软件移植说明
1
、
移植前准备工作。
将原有的
ST
的
10x
的库替换
成我们
GD
的库
(可以从
demo
中找到)
,
包括系
统头文件、
外设库文件以及启动文件等,当前给客户提供的库都是以
stm32f0xx
命名,这是我们在
ST
的
10x
和
0xx
的外设库的基础上修改的,完全可以正常使用,后续我们会推出自己的库。开
发环境的
device
选择和
fla
sh
配置可以有两种方式,一种方式是直接
device
中选择
ST
的
STM
32F100C8
,
flash
配置选
择
ST
的
64K
的
flash
配置文件;另一种方式是使用我们提供的
GD
的
GD32F1x0
的
device
(需要事先在
ke
il
安装目录下添加我们
GD
的配置文
件)
,
flash
配
< br>置选择我们
GD
的
64K
p>
flash
配置文件,其他配置可保持与之前相同不用改动。如果选
择
GD
的配置文件,需要操作的步骤如下(假如
keil
的安装路径为:
C:Keil
)
:
①
拷贝
到
C:KeilUV4
。
②
拷贝
GD32F1x0_
到
C:KeilARMFlash
。
③
C:Keil
< br>下创建文件夹命名“
GD
”
。
④
GD
文
件夹下创建文件夹命名“
GD32F1x0
”
< br>。
⑤
拷贝
到
C:K
eilARMSFDGDGD32F1x0
。
这样,在
keil
的
devi
ce
界面,就可以找到
GD32F1x0
的
device
,如图
1.1
所示。
图
1.1
选择
GD32F1x0
的
device
图
1.2
flash
配置文件及路径说明
2
、
所有模
块的
GPIO
初始化部分。
1x0
相对于
10x
系
列最大的改动在
GPIO
部分,主要有以下三点:
2.1
GPIO
时钟总线配置区别。
之前
10x
系列的
G
PIO ABCDF
都挂在了
APB2
总线上,而
1x0
的
GPIO
口都挂在了
AHB
总
线
上,所以在打开
GPIO
ABCDF
的时钟的时候就要注意,如下:
< br>比如使能
GPIOA
时钟:
<
/p>
10x
下配置为:
RCC_APB2Pe
riphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
1x0
下需改为:
RCC_AHBPeriphClo
ckCmd(RCC_AHBPeriph_GPIOA,ENABLE);
GPIO
B
、
C
、
D<
/p>
、
F
的时钟使能以此类推。
2.2
GPIO
口复用配置区别。
1x0
系列和
10x
系
列的
IO
口复用配置模式不同。具体对比说明如下:
比如
USART1
的<
/p>
GPIO
口配置,可以映射到
PA9
p>
和
PA10
,也可以映射到
PB6
和
PB7
。
2.2.1
10x
配置
USART1
的
< br>GPIO
口,大概过程如下(以
PA9
< br>和
PA10
为例)
:
2.2.1.1
首先使能
USART1
、
GPIOA
和
p>
AFIO
的时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,
ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB
2Periph_GPIOA , ENABLE);
RC
C_APB2PeriphClockCmd(RCC_APB2Periph_AFIO
, ENABLE);
2.2.1.2
然后配置
PA9
p>
和
PA10
的模式。
GPIO_InitTypeDef GPIO_InitStructure;
GPIO__Pin =
GPIO_Pin_9;
GPIO__Speed =
GPIO_Speed_50MHz;
GPIO__Mode =
GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,
&GPIO_InitStructure);
GPIO__Pin = GPIO_Pin_10;
GPIO__Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
1x0
无需这一步
复用模式配置
2.2.1.3
p>
最后配置串口相应参数,这部分和
1x0
完
全相同,就不列出来了。
2.2.2
1x0
配置
USART1
的
GPIO
口,大概过程
如下(以
PA9
和
PA10
为例)
:
2.2.1.1
首先使能
USART
1
、
GPIOA
的时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Pe
riph_USART1, ENABLE);
RCC_AHBPeriphCloc
kCmd(RCC_AHBPeriph_GPIOA , ENABLE);
2.2.1.2
然后配置
PA9
p>
和
PA10
的模式。
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinAFConfig( GPIOA ,
GPIO_PinSource9, GPIO_AF_1 );
GPIO_PinAFConfig( GPIOA ,
GPIO_PinSource10, GPIO_AF_1 );
GPIO__Pin
= GPIO_Pin_9 |
GPIO_Pin_10;
GPIO__Mode
= GPIO_Mode_AF;
GPIO__Speed
= GPIO_Speed_50MHz;
GPIO__OType
=
GPIO_OType_PP;
GPIO__PuPd
= GPIO_PuPd_NOPULL;
GPIO_Init( GPIOA ,
&GPIO_InitStructure);
如果将
USA
RT1
映射到
PB6
和
PB7
,则复用模式配置如下:
GPIO_PinAFConfig( GPIOB ,
GPIO_PinSource6, GPIO_AF_0 );
GPIO_PinAFConfig( GPIOB ,
GPIO_PinSource7, GPIO_AF_0 );
复用模式配置
此
处
不
需
要
再
配
置
PA10
为浮空输
入了
至于为什么
PA9
、
PA10
映射
到
GPIO_AF_1
,
PB6
和
PB7
映射到
GP
IO_AF_0
,需要查看
1x0
的<
/p>
datasheet
,如下图:
图
2.1
PB
复用功能说明
< br>所以,关于
GPIO
口的复用配置都需要参考
datasheet
来完成。
2.2.2.3
最后配置串口相应参数,这部分和
10x
完全相同,就不列出来了。
2.3
GPIO
口模式配置
10x
系列的
GPIO
口有<
/p>
8
种模式,如下图:
图
2.2
10x
系列
GPIO
口
8
种模式
< br>
而
1x0
系列的
GPIO
口配置在
10x
系
列的基础上,
按输入输出、
推挽开漏、
上拉下拉模式
分成了三个结构体,相较
10x
< br>系列而言,组合方式更加自由,如下图:
图
2.3
1x0
系列
GPIO
口模式
例如:
10x
系列配置某个
GPIO
口为推挽输出
GPIO__Mode
= GPIO_Mode_Out_PP
1x0
系列中,就变成了两条语句:
GPIO__Mode = GPIO_Mode_OUT;
GPIO__OType= GPIO_OType_PP;
又如:
10x
系列配置某个
GPIO<
/p>
口为下拉输入:
GPIO__Mode
= GPIO_Mode_IPD
1x0
系列中,就变成了:
GPIO__Mode = GPIO_Mode_IN;
GPIO__PuPd
=
GPIO_PuPd_DOWN;
3
、
外设中断部分
1x0
相对于
10x
系列增加了一些模块(如
SYSCFG
、
TSC
、
p>
CEC
等)
,删减了一些模块(如
1x0
只有一个
ADC
、最多两路
DMA
等)
,因此
1x0
的中断向量表的名称包括位置相对于
10
x
系列都有很大改变。很多客户都反映移植中经常遇到的问题就是无法进入中断。
10x
和
1x0
系列
的中断向量表的对比如下:
-
-
-
-
-
-
-
-
-
上一篇:地形因子计算详解
下一篇:测绘专业英语地形测量文章翻译