文章目录

  • 前言
  • 新建工程
  • CAN发送
  • 调试运行
  • 工程代码

前言

GD32VF103_环境配置_GPIO_外部中断
GD32VF103_定时器中断
GD32VF103_串口发送_printf_接收中断_DMA
GD32VF103_DAC
我们前三节写了GPIO, EXTI, TIMER, USART, DAC的用例, 本节写 CAN 发送的用例, 为什么是发送不是接收, 还不是因为接收比较复杂, 没有调好… 用的 CAN1(PB13--CAN1_TX, PB12--CAN1_RX), 自己拿烙铁焊了 CAN电平转换芯片 TCAN1051DQ1, 带Q的车规的片子:


CAN1接CAN分析仪, 500k, 终端电阻用了CAN分析仪上的120Ω, 虽然不是60Ω, 在这里问题不大.

新建工程

打开NucleiStudio:

  • File -> New -> C/C++ Project, 选择C Managed Build
  • 选择GigaDevice RISC-V Project, 填入工程名
  • MCU默认暂时只有GD32VF103, 然后Demo也没法选, 只有Running_LED, 不变
  • 下一步, 完成.

CAN发送

CAN, 标准帧, 扩展帧等的基本原理和相关资料不再赘述, 网上搜去, STM32的资料或者搞汽车方面的比较多.

主要配置下CAN的通讯速率, 应该是APB1的54M时钟, 预分配(prescaler)12, 得4.5MHz, 然后 can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;, can_parameter.time_segment_2 = CAN_BT_BS2_3TQ;, 所以最后通讯速率 4.5M/(5+3+1) = 0.5M = 500k, 与can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;关系不大.

代码如下:

#include "gd32vf103.h"
#include "systick.h"can_trasnmit_message_struct transmit_message;void can1_config(void) {can_parameter_struct can_parameter;can_filter_parameter_struct can_filter;/* initialize CAN register */can_deinit(CAN1);/* initialize CAN */can_parameter.time_triggered = DISABLE;can_parameter.auto_bus_off_recovery = ENABLE;can_parameter.auto_wake_up = ENABLE;can_parameter.auto_retrans = ENABLE; //no_auto_retranscan_parameter.rec_fifo_overwrite = DISABLE;can_parameter.trans_fifo_order = DISABLE;can_parameter.working_mode = CAN_NORMAL_MODE;can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;can_parameter.time_segment_2 = CAN_BT_BS2_3TQ;/* baudrate 1Mbps */can_parameter.prescaler = 12; //54M / 12 / (5+3+1) =  500kbpscan_init(CAN1, &can_parameter);
}int main(void) {rcu_periph_clock_enable(RCU_CAN1);rcu_periph_clock_enable(RCU_GPIOB);gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13); //PB13 -- CAN1_TXgpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_12);  //PB12 -- CAN1_RX//gpio_pin_remap_config(GPIO_CAN1_REMAP,DISABLE);  //Remapcan1_config();transmit_message.tx_sfid = 0x321; //standard format frame identifiertransmit_message.tx_efid = 0x00; //extended format frame identifiertransmit_message.tx_ft = CAN_FT_DATA;    //type of frame, data or remotetransmit_message.tx_ff = CAN_FF_STANDARD;   //format of frame, standard or extended formattransmit_message.tx_dlen = 2;    //data lengthtransmit_message.tx_data[0] = 0x00;transmit_message.tx_data[1] = 0x00;while(1) {++transmit_message.tx_data[1];can_message_transmit(CAN1, &transmit_message);delay_1ms(1000);}return 0;
}

调试运行

结果如下:


符合代码预期.

工程代码

https://download.csdn.net/download/weifengdq/11951375

GD32VF103_CAN发送相关推荐

  1. java发送简单邮件_Java程序实现发送简单文本邮件

    /** * Java程序实现发送简单文本邮件 * * @author Administrator * */ public class SendTextMail { // 定义发件人地址 public  ...

  2. Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)

    Redis 是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等 ...

  3. python 网络编程之Socket通信案例消息发送与接收

    背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...

  4. 发送快递:配置静态路由

    背景 基础组网,比如现在要实现相互通信,通过两台计算机来检测是否互通,但是它们中间通过一些路由器相互连接,这个时候,你要考虑,怎么配置这些路由器,包括给pc配地址,给路由器配地址,怎么定义这些网段! ...

  5. JAVA如何实现发送短信

    今天看到了一个需求,需要做一个发送短信的功能,网上找了找,大概有这几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;( ...

  6. ajax发送动态字符传,如何发送ajax请求文件与其他字符串的变量?

    我想创建ajax调用并发送数据与文件和其他变量,我也使用django,如果它的帮助.如何发送ajax请求文件与其他字符串的变量? 我尝试: js文件: $("#save-new-reques ...

  7. 火狐浏览器允许ajax,解决火狐浏览器发送jquery的ajax请求无效的问题

    今天遇到这样一个问题: 页面在chrome下发送ajax的请求是没有问题的,但是在firfox下无效. 代码大致如下: //前面省略 ..... 生成成绩 查询成绩 ...... ...... fun ...

  8. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  9. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

最新文章

  1. 七个开发者成就百亿市值公司?这个技术思路如今让阿里发扬光大
  2. ASP.NET Core Web Razor Pages系列教程:使用ASP.NET Core创建Razor Pages Web应用程序
  3. css 剪辑图片_CSS clip:rect 矩形剪裁功能,截取图片某一块
  4. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple
  5. sh: lmstat: 没有那个文件或目录_没有天生的合适,只有磨合出来的感情
  6. 算法设计与分析——回溯法——批处理作业调度
  7. ups一直响是什么原因_UPS的完整形式是什么?
  8. 【华为云技术分享】《跟唐老师学习云网络》—ARP你在哪
  9. java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layou
  10. 11. SpringMVC拦截器(资源和权限管理)
  11. 【备注】【C11】《Android游戏编程之从零开始》PDF 下载
  12. html 显示闹钟,闹钟设置.html
  13. html div 360旋转动画效果,分享4种CSS3效果(360度旋转、旋转放大、放大、移动)
  14. 为什么BAT公司宁愿花25K重新招人,也不愿花20K留住老员工?
  15. android多个switch可,能刷安卓,任天堂 Switch 再跑个 Win10 如何?
  16. 推荐七大写作利器,总有一款适合你
  17. 自学Java系列 笔记2 高级类特性1
  18. VC++ CTime COleDateTime的常用操作和比较
  19. 使用EventLog类写Windows事件日志
  20. Can not squeeze dim[1], expected a dimension of 1

热门文章

  1. 介绍一个超级的计算器--J语言(1)
  2. Webview 打开qq聊天窗口,申请进群
  3. Flash媒体服务器
  4. 利用SRS搭建直播服务器
  5. mysql出现LF怎么办,MySQL的LF_HASH
  6. 攻防世界 Crypto高手进阶区 3分题 wtc_rsa_bbq
  7. 安卓APP源码和设计报告——智能垃圾桶
  8. 一级建造师资格审核需要提交哪些材料?
  9. Hadoop3.x学习教程(二)
  10. MyCobot六轴机械臂开箱及开发前的准备工作(一)