gd32can功能配置及注释

时间: 2023-07-12 21:40:28 浏览: 74
以下是基于GD32F3xx系列芯片的CAN功能配置及注释示例: ```c #include "gd32f3xx.h" void CAN_Configuration(void) { /* 使能CAN时钟 */ rcu_periph_clock_enable(RCU_CAN0); /* 配置CAN GPIO */ gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8 | GPIO_PIN_9); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8 | GPIO_PIN_9); gpio_af_set(GPIOB, GPIO_AF_9, GPIO_PIN_8 | GPIO_PIN_9); /* CAN 初始化 */ can_deinit(CAN0); can_struct_para_init(&can_init_struct); /* 定义CAN时钟分频 */ can_init_struct.can_frequency = 36000000U; /* 定义CAN位速率 */ can_init_struct.can_tx_sjw = CAN_SJW_1TQ; can_init_struct.can_rx_sjw = CAN_SJW_1TQ; can_init_struct.can_bs1 = CAN_BS1_13TQ; can_init_struct.can_bs2 = CAN_BS2_2TQ; /* 定义过滤器 */ can_filter_struct_para_init(&can_filter_init_struct); /* 过滤器模式 */ can_filter_init_struct.can_filter_bits = CAN_FILTERBITS_32BIT; /* 过滤器ID */ can_filter_init_struct.can_filter_id_high = 0x0000; can_filter_init_struct.can_filter_id_low = 0x0000; /* 过滤器掩码 */ can_filter_init_struct.can_filter_mask_id_high = 0x0000; can_filter_init_struct.can_filter_mask_id_low = 0x0000; /* 过滤器FIFO */ can_filter_init_struct.can_filter_fifo_number = CAN_FIFO0; /* 过滤器使能 */ can_filter_enable(CAN0, 0); /* CAN 初始化 */ can_init(CAN0, &can_init_struct); /* 配置CAN中断 */ nvic_irq_enable(CAN0_RX0_IRQn, 0, 0); can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0); /* 启动CAN */ can_enable(CAN0); } void CAN_Transmit(uint8_t* data, uint8_t len, uint32_t id) { can_trasnmit_message_struct transmit_message; /* 定义传输结构体 */ can_struct_para_init(&transmit_message); /* 定义传输格式 */ transmit_message.tx_sfid = id; transmit_message.tx_efid = 0x00; transmit_message.tx_ff = CAN_FF_STANDARD; transmit_message.tx_ft = CAN_FT_DATA; /* 定义传输数据 */ for (uint8_t i = 0; i < len; i++) { transmit_message.tx_data[i] = data[i]; } /* 定义传输数据长度 */ transmit_message.tx_dlen = len; /* 发送消息 */ can_message_transmit(CAN0, &transmit_message); } void CAN_Receive(uint8_t* data, uint8_t* len, uint32_t* id) { can_receive_message_struct receive_message; /* 定义接收结构体 */ can_struct_para_init(&receive_message); /* 接收消息 */ can_message_receive(CAN0, CAN_FIFO0, &receive_message); /* 获取接收数据 */ *id = receive_message.rx_sfid; *len = receive_message.rx_dlen; for (uint8_t i = 0; i < *len; i++) { data[i] = receive_message.rx_data[i]; } } ``` 注释: 1. `CAN_Transmit`函数:定义CAN发送函数 2. `can_trasnmit_message_struct`:CAN发送结构体,使用`can_struct_para_init`函数初始化为默认值 3. `transmit_message.tx_sfid = id`:定义CAN标准帧ID 4. `transmit_message.tx_ff = CAN_FF_STANDARD`:定义CAN标准帧格式 5. `transmit_message.tx_ft = CAN_FT_DATA`:定义CAN数据帧类型 6. `transmit_message.tx_data[i] = data[i]`:定义CAN数据 7. `transmit_message.tx_dlen = len`:定义CAN数据长度 8. `can_message_transmit(CAN0, &transmit_message)`:发送CAN消息 9. `CAN_Receive`函数:定义CAN接收函数 10. `can_receive_message_struct`:CAN接收结构体,使用`can_struct_para_init`函数初始化为默认值 11. `can_message_receive(CAN0, CAN_FIFO0, &receive_message)`:接收CAN消息 12. `*id = receive_message.rx_sfid`:获取CAN标准帧ID 13. `*len = receive_message.rx_dlen`:获取CAN数据长度 14. `data[i] = receive_message.rx_data[i]`:获取CAN数据

相关推荐

最新推荐

recommend-type

GD32系列微控制器入门开发指南 V1.0.pdf

GD32系列微控制器入门开发指南 目录 1.GD32 MCU开发资料下载 2.GD32 MCU开发环境搭建 3.GD32 MCU烧录说明 4.固件库使用方法和启动流程介绍 5.GD32 MCU常见外设介绍 ...7.GD32 MCU选项字节设置及解除方法 8.分散加载说明
recommend-type

GD32F10x_yonghushouce_Rev2.5.pdf GD32F10x_用户手册 中文

GD32F10x_yonghushouce_Rev2.5.pdf GD32F10x_用户手册 中文
recommend-type

GD32选型-GD32-Series-of-MCUs-Selection-Guide(Mar-2022)

选型表 备份用 http://www.gd32mcu.com/cn/download/9?kw=GD32F1
recommend-type

STM32 CAN 通讯 标示符过滤器设置

最近看了下STM32 CAN 通讯其中标示符过滤器设置大有讲究。特别是你要使用ST库函数时,当过滤器工作在屏蔽模式下,并且你把屏蔽位设了1也就是标示符对应位必须全部匹配才能通过,这是由其要小心。
recommend-type

GD32F207xx_Datasheet_Rev2.0.pdf

GD32F2采用2.6V-3.6V电源,I/O口可承受5V电平。支持高级电源管理并具备三种省电模式。在外部电池供电情况下,内置的高精度可校准实时时钟(RTC)运行时的待机电流低于1uA。支持三相PWM互补输出和霍尔采集接口的2个16位...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

spring添加xml配置文件

1. 创建一个新的Spring配置文件,例如"applicationContext.xml"。 2. 在文件头部添加XML命名空间和schema定义,如下所示: ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。