GD32F40x开发笔记

一、时钟配置

使用外部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引脚状态
在这里插入图片描述

六、。。。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值