GD32C103/GD32C113 CANFD

CANFD介绍

FD全称是 Flexible Data-Rate,顾名思义,表示CAN-FD 的帧报文具有数据场波特率可变的特性,即仲裁场合数据控制场使用标准的通信波特率,而到数据场就会切换为更高的通信波特率,车端常用的为2Mbit/s和5Mbit/s,从而达到提高通信速率的目的

CAN
在这里插入图片描述
CAN FD
在这里插入图片描述

GD32C103/GD32C113介绍

GD32C113是GD32C103的升级版,带两路CANFD

在这里插入图片描述

在这里插入图片描述

GD32C113 CAN引脚

can0

在这里插入图片描述

在这里插入图片描述

can0

在这里插入图片描述

在这里插入图片描述

示例

extern can_trasnmit_message_struct g_transmit_message;
extern can_receive_message_struct g_receive_message;
extern FlagStatus can0_receive_flag;
extern FlagStatus can1_receive_flag;

can_parameter_struct can_parameter;
can_fdframe_struct can_fd_parameter;
can_fd_tdc_struct can_fd_tdc_parameter;

启用时钟

// 启用GPIO时钟
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOB);

// 启用CAN时钟
rcu_periph_clock_enable(RCU_CAN0);
rcu_periph_clock_enable(RCU_CAN1);

// 根据实际配置复用时钟
// rcu_periph_clock_enable(RCU_AF);

初始化CAN FD

/* configure CAN0 GPIO */
gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_0);		// rx
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);		// tx
	
/* configure CAN1 GPIO */
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_12);		// rx
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ
### GD32C103定时器配置方法及示例代码 #### 定时器简介 GD32C103微控制器中的定时器模块提供了多种功能,包括计数、捕获/比较以及脉宽调制(PWM)输出等功能。为了正确配置这些定时器,需要了解基本的工作原理及其相关寄存器设置。 #### 配置流程 #### 时钟使能 要使用任何外设之前,必须先开启对应的APB总线上的时钟信号。对于GD32C103来说,这一步骤可以通过调用特定于该芯片家族的库函数来完成[^1]。 ```c /* 开启TIMERx时钟 */ rcu_periph_clock_enable(RCU_TIMERx); ``` #### 初始化结构体定义 创建并填充一个`timer_initpara`类型的变量用于存储初始化参数: ```c struct timer_initpara initpara; memset(&initpara, 0, sizeof(initpara)); ``` #### 设置自动重载预分频系数 设定ARR(Auto Reload Register)和PSC(Prescaler Counter),这两个值决定了定时周期长度。这里假设希望得到精确的时间间隔,则需根据系统频率计算合适的数值。 ```c // 假定系统频率为72MHz uint16_t prescaler_value = (uint16_t)((SystemCoreClock / 2) / 1000000) - 1; // PSC=7199 initpara.prescaler = prescaler_value; // 自动重装载值 initpara.alignedmode = TIMER_COUNTER_EDGE; initpara.counterdirection = TIMER_COUNTER_UP; initpara.period = 9999; /* ARR=9999 */ initpara.clockdivision = TIMER_CKDIV_DIV1; ``` #### 启用中断和服务程序注册 如果计划利用定时器触发事件处理机制,则还需要配置相应的NVIC优先级,并编写ISR(Interrupt Service Routine),即中断服务子程序。 ```c nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3); /* 配置Timerx中断优先级 */ nvic_irq_enable(TIMERx_IRQn, 0, 0); /* 清除Timerx中断标志位 */ timer_interrupt_flag_clear(TIMERx, TIMER_INT_FLAG_UPDTE); ``` #### 定时器启动 最后,在完成了上述准备工作之后就可以正式激活定时器了。 ```c timer_init(TIMERx, &initpara); timer_autoreload_shadow_enable(TIMERx); timer_interrupt_enable(TIMERx, TIMER_INT_UPDATE); timer_enable_counter(TIMERx); ``` 以上就是针对GD32C103定时器的一个典型配置过程概述。具体应用场合可能还会涉及到更多细节调整,比如改变工作模式或是启用其他特性等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值