一、时钟配置
使用外部8MHz无源晶振作为时钟源,在程序配置中修改__HXTAL初始值为 8000000,并设置倍频到120MHz.
/* system frequency define */
#define __IRC16M (IRC16M_VALUE) /* internal 16 MHz RC oscillator frequency */
#define __HXTAL ((uint32_t)8000000) /* high speed crystal oscillator frequency */
#define __SYS_OSC_CLK (__IRC16M) /* main oscillator frequency */
/* select a system clock by uncommenting the following line */
//#define __SYSTEM_CLOCK_IRC16M (uint32_t)(__IRC16M)
//#define __SYSTEM_CLOCK_HXTAL (uint32_t)(__HXTAL)
//#define __SYSTEM_CLOCK_120M_PLL_IRC16M (uint32_t)(120000000)
#define __SYSTEM_CLOCK_120M_PLL_8M_HXTAL (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_120M_PLL_25M_HXTAL (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_168M_PLL_IRC16M (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_25M_HXTAL (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_200M_PLL_IRC16M (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_200M_PLL_8M_HXTAL (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_200M_PLL_25M_HXTAL (uint32_t)(200000000)
二、串口通讯配置
配置串口1,通讯波特率为9600,开启引脚复用功能设置为GPIO_AF_7,并开启串口中断,设置为读取非空中断
串口中断配置
串口解析16进制数据
void USART0_IRQHandler(void) //串口屏和控制板通讯
{
uint8_t fstdata = 0;
int i;
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) {
usart_interrupt_flag_clear(USART0,USART_INT_FLAG_RBNE);
switch(USART1_RX_FRST){
case 0: //查找首字节
{
fstdata = usart_data_receive(USART0);
if(fstdata == 0x38) {
USART1_RX_FRST = 1;
USART1_RX_BUF[0] = fstdata;
USART1_RX_NUM = 1;
}
else if(fstdata == 0x39)
{
USART1_RX_FRST = 2;
USART1_RX_BUF[0] = fstdata;
USART1_RX_NUM = 1;
}
break;
}
case 1:{
USART1_RX_BUF[USART1_RX_NUM] = usart_data_receive(USART0);
USART1_RX_NUM++;
if(USART1_RX_NUM >= 4)
{
USART1_RX_FRST = 0;
for(i=0;i<4;i++)
Date_RX[i]=USART1_RX_BUF[i];
}
break;
}
case 2:
{
USART1_RX_BUF[USART1_RX_NUM] = usart_data_receive(USART0);
USART1_RX_NUM++;
if(USART1_RX_NUM >= 2)
{
if(USART1_RX_BUF[1]==0x04)
{
USART1_RX_FRST = 0;
//自定义功能
break;
}
else if(USART1_RX_BUF[1]==0x05)
{
USART1_RX_FRST = 0;
//自定义功能
break;
}
else if(config_RX[1]==0x03)
USART1_RX_FRST = 3;
}
break;
}
case 3:
{
USART1_RX_BUF[USART1_RX_NUM] = usart_data_receive(USART0);
USART1_RX_NUM++;
if(USART1_RX_NUM >= 9) //数据接收完提取数据并重新进入起始帧监测
{
USART1_RX_FRST = 0;
for(i=0;i<9;i++)
config_RX[i]=USART1_RX_BUF[i];
//自定义功能
}
break;
default:
break;
}
}
}
}
串口解析字符串函数
待补充
三、CAN通讯配置
GD32F4X若使用到两路CAN需在一起进行初始化配置,这里同样开启复用模式设置为GPIO_AF_9,CAN通讯波特率设置为500K,可通过波特率计算器计算所需要波特率分频系数,也可通过CAN波特率计算公式得到。最后打开接收非空中断
四、定时器配置
此处使用基本定时器一设置定时中断,计数时间为为500MS,向上计数
五、GD32F4位带操作
由于都是基于cortex-M3内核,自己仿照STM32写了一个位操作配置,方便控制单个GPIO引脚状态