GD32VF103_CAN发送
文章目录
- 前言
- 新建工程
- 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发送相关推荐
- java发送简单邮件_Java程序实现发送简单文本邮件
/** * Java程序实现发送简单文本邮件 * * @author Administrator * */ public class SendTextMail { // 定义发件人地址 public ...
- Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)
Redis 是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等 ...
- python 网络编程之Socket通信案例消息发送与接收
背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...
- 发送快递:配置静态路由
背景 基础组网,比如现在要实现相互通信,通过两台计算机来检测是否互通,但是它们中间通过一些路由器相互连接,这个时候,你要考虑,怎么配置这些路由器,包括给pc配地址,给路由器配地址,怎么定义这些网段! ...
- JAVA如何实现发送短信
今天看到了一个需求,需要做一个发送短信的功能,网上找了找,大概有这几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;( ...
- ajax发送动态字符传,如何发送ajax请求文件与其他字符串的变量?
我想创建ajax调用并发送数据与文件和其他变量,我也使用django,如果它的帮助.如何发送ajax请求文件与其他字符串的变量? 我尝试: js文件: $("#save-new-reques ...
- 火狐浏览器允许ajax,解决火狐浏览器发送jquery的ajax请求无效的问题
今天遇到这样一个问题: 页面在chrome下发送ajax的请求是没有问题的,但是在firfox下无效. 代码大致如下: //前面省略 ..... 生成成绩 查询成绩 ...... ...... fun ...
- httpclient工具类,post请求发送json字符串参数,中文乱码处理
在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...
- python3:利用SMTP协议发送QQ邮件+附件
转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...
最新文章
- 七个开发者成就百亿市值公司?这个技术思路如今让阿里发扬光大
- ASP.NET Core Web Razor Pages系列教程:使用ASP.NET Core创建Razor Pages Web应用程序
- css 剪辑图片_CSS clip:rect 矩形剪裁功能,截取图片某一块
- python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple
- sh: lmstat: 没有那个文件或目录_没有天生的合适,只有磨合出来的感情
- 算法设计与分析——回溯法——批处理作业调度
- ups一直响是什么原因_UPS的完整形式是什么?
- 【华为云技术分享】《跟唐老师学习云网络》—ARP你在哪
- java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layou
- 11. SpringMVC拦截器(资源和权限管理)
- 【备注】【C11】《Android游戏编程之从零开始》PDF 下载
- html 显示闹钟,闹钟设置.html
- html div 360旋转动画效果,分享4种CSS3效果(360度旋转、旋转放大、放大、移动)
- 为什么BAT公司宁愿花25K重新招人,也不愿花20K留住老员工?
- android多个switch可,能刷安卓,任天堂 Switch 再跑个 Win10 如何?
- 推荐七大写作利器,总有一款适合你
- 自学Java系列 笔记2 高级类特性1
- VC++ CTime COleDateTime的常用操作和比较
- 使用EventLog类写Windows事件日志
- Can not squeeze dim[1], expected a dimension of 1