历史上的今天
今天是:2024年09月30日(星期一)
2019年09月30日 | stm32CubeMx CAN 发送数据
2019-09-30 来源:eefocus
平台 STM32F429
软件 STM32CubeMx 5.0.0
固件库 STM32Cube_FW_F4_V1.23.0
目的: 实现 CAN 的发送
一 简介
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO11898)。是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。

由于 CAN 属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,特别地,CAN 还会使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。
为了实现位同步,CAN 协议把每一个数据位的时序分解成如图 43-5 所示的 SS 段、PTS 段、PBS1 段、PBS2 段,这四段的长度加起来即为一个 CAN 数据位的长度。分解后最小的时间单位是 Tq,而一个完整的位由 8~25 个 Tq 组成。为方便表示,图中的高低电平直接代表信号逻辑 0 或逻辑 1(不是差分信号)。

波特率 = Tq *(SS+PTS+PBS1+PBS2)
二 创建工程

生成代码
修改代码
启动 CAN
HAL_CAN_Start(&hcan1);
发送数据
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0x23, 0x81, 0x60, 0x00, 0x55, 0x55, 0x08, 0x00};
uint32_t TxMailbox;
uint32_t std_id = 0x601;
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.IDE = CAN_ID_STD;
TxHeader.StdId=std_id;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.DLC = 8;
if (HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox) != HAL_OK)
{
/* Transmission request Error */
Error_Handler();
}
实验结果:
使用USB转CAN盒,打开ecantools软件,波特率为500k
按下按键,收到数据

史海拾趣
|
本人刚学VB,在写一个串口数据采集大的小软件,刚开始就遇到了问题,以下代码,我在调试时都正常运行,能正确获得返回数据,可是生成exe文件后,程序却没反应,也没有错误信息出现!就是没有数据,求高手帮忙! Public gSend As Boolean &nb ...… 查看全部问答> |
|
wince5.0中如何捕捉鼠标位置,实现全屏书写,实时显示书写的轨迹? wince5.0中如何捕捉鼠标位置,实现全屏书写,实时显示书写的轨迹?在自己建立的窗口中已经可以书写,显示轨迹了。但是出来自己创建的窗口就没办法书写了。困恼了很久了,高手、专家指点啊。最好能给点实例代码参考 邮箱echenxi@163.com … 查看全部问答> |
|
我现在在测试zigbee加密问题,协调器不使用加密,而路由器使用机密的时候,发现路由加入不了网络,不知到为什么。请哪位高手指教一下。 哦,我加密的时候只在f8Config.cfg上面把DSECURE设成1.… 查看全部问答> |
|
最近朋友让我给他弄一个市电检测电路,用在工业上的,要求在市电200V以上的时候输出一个脉冲,并且脉冲宽度在有限的时间内可调,各位大虾有没有做过类似电路的?望指点一二。以下是我个人设计的电路,在我个人的系统中测试的结果还算理想,经过几天 ...… 查看全部问答> |
|
有两个待测电压A,B, B的功率比A大;两块g2553; 现象:测电压A,用万用表可以测得出,一接到板子上用g2553A测就不行;换上g2553B就行了.程序是一样。 测电压B,用用万用表跟g2553A B都可以测得出。 ...… 查看全部问答> |




