STM32H743 | FDCAN 波特率问题
直奔主题,最近项目上接触了FDCAN,主控为STM32H743。在开发过程中存在了几点疑惑,特此记录。
- 波特率设置问题
CAN通讯的波特率计算方式为:
BaudRate = Tq *(SYNC_SEG + BS1 + BS2)
在芯片手册上,FDCAN_DBTP寄存器中,DBRP、DTSEG1、DTSEG2分别为时钟分频值、BS1 及 BS2 段的长度。对于以上寄存器值,硬件将该值解析为编程值加 1,也就是说,实际上我们在计算波特率时,需要将寄存器值加上1来进行计算,即
BaudRate = CLK / ( ( (DTSEG1+1) + (DTSEG1+1) + 1 ) * (DBPR + 1) )


但是,实际上,在使用官方的HAL库进行开发时,很有可能会出现误解。什么误解呢?就是在配置CAN的通讯波特率时,我们可能会误以为我们给FDCAN初始化结构体的成员变量所赋的值为编程值,即实际计算波特率时还需要加一。这样的话,我们配置的波特率其实并不是你期望的值。
主要是因为在STM32 HAL库的接口函数中,HAL_FDCAN_Init()函数内部已经做过了处理。做了什么处理呢?就是将我们给FDCAN初始化结构体的成员变量所赋的值减1后再给寄存器赋值,即通过STM32 HAL库的HAL_FDCAN_Init()函数来配置波特率时,波特率的计算就不需要再进行加1了。
以下就是在STM32CubeMx环境下初始化STM32H743片上外设FDCAN的简略过程,主要说明以下波特率问题。
先说明下FDCAN的时钟配置,FDCAN的时钟可由HSE、PLL1Q、PLL2Q提供,在此处我选择用PLL1Q,频率为80MHz

以下为在STM32CubeMX下配置FDCAN时Configuration窗口的相关配置。

通过STM32CubeMX生成的FDCAN初始化代码

从上图可以看出,STM32 HAL库的HAL_FDCAN_Init()函数内部已经做过了处理,在给寄存器位赋值之前就将已经我们给FDCAN初始化结构体的成员变量所赋的值减1了。
STM32H743 | FDCAN 波特率问题的更多相关文章
- 3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)
本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...
- MSP430精准配置高速串口波特率的方法
引言 在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常.通过示波器对多个设备的串口波特率及系统时钟频率测试, ...
- MSP430设置串口波特率的方法
给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接 ...
- uboot和内核波特率不同
uboot和内核波特率不同,在uboot启动后,修改uboot参数: set bootargs 'noinitrd root=/dev/mtdblock3 init=/linuxrc console= ...
- 终端I/O之波特率函数
波特率(baud rate)是一个以往采用的术语,现在它指的是"位/秒"(bits per second).虽然大多数终端设备对输入和输出使用同一波特率,但是只要硬件许可,可以将它 ...
- FPGA串口波特率简析
以前用单片机,一直都是直接用就行,设置波特率时,直接写9600就行,一直没有仔细考虑过,今天打算用FPGA写个串口程序时才知道,原来根本就是没弄明白.一下是我的一些见解.如果诸位看官觉得不对,欢迎指正 ...
- STM32 CAN 波特率设置及采样点设置
一.CAN波特率 STM32 位时间定义: ● 同步段(SYNC_SEG):通常期望位的变化发生在该时间段内.其值固定为1个时间单元(1 x tCAN).● 时间段1(BS1):定义采样点的位置.它包 ...
- 串口接收模块(verilog) 波特率115200
我来分享一下uart协议之接收verilog代码 顶层实例化 `timecale 1ns / 1ps////////////////////////////////////////////////// ...
- hi3531串口波特率计算
波特率配置 通过配置寄存器UART_IBRD 和UART_FBRD 可以设置UART 工作的波特率,波特率 计算公式为: 当前波特率=UART 参考时钟频率(1/2 总线时钟频率)/(16 x 分频系 ...
随机推荐
- Chrome浏览器 Console调试台的简单使用
打开调试台 方法1:在chrome浏览器中打开网页,按下F12,点击下图框选内容. 方法2: 浏览器中鼠标右键选择查看网页源代码后,再按上图操作. 调试台的功能 (因为是第一次使用这个调试台,只能罗 ...
- 驱动开发 —— 从零开始(1) 配置vs20xx+wdkxx环境
网上教程很多.如何去安装如何去配置 但是也有些坑感觉并不是那么的完善 wdk+vs下载链接:https://docs.microsoft.com/zh-cn/windows-hardware/driv ...
- 用头发换JS的第一天
因为平时也在上班,这些都是在地铁上抽空开始看的,总结来说还是有一些收获存在,每次看都能发现一些新东西,废话不多说,开撸! JavaScript是一种网页编程语言,可以对网页的行为进行编程,简单来说HT ...
- TensorFlow从0到1之TensorFlow逻辑回归处理MNIST数据集(17)
本节基于回归学习对 MNIST 数据集进行处理,但将添加一些 TensorBoard 总结以便更好地理解 MNIST 数据集. MNIST由https://www.tensorflow.org/get ...
- CentOS安装部署Mysql 5.7
1,如果没有安装wget,先安装yum -y install wget 2,下载MySQL官方的 Yum Repositorywget http://repo.mysql.com/mysql57-co ...
- Android选项卡学习
什么是选项卡 顶部的导航条就是选项卡了. Android开发中添加选项卡的步骤 图片不太懂上代码: activity_main.xml <?xml version="1.0" ...
- LeetCode 78,面试常用小技巧,通过二进制获得所有子集
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第47篇文章,我们一起来看下LeetCode的第78题Subsets(子集). 这题的官方难度是Medium,点赞 ...
- vs.net/vscode中使用Beetlex创建vue应用
平时在开发Vue应用则需要安装nodejs,vue cli等相关东西相对来说麻烦一些:如果你喜欢像vs.net/vscode创建普通项目一样就能开发Vue项目的话那可以尝试一下BeetleX针对Vue ...
- 容器技术之Docker Machine
前文我们聊了下docker容器的资源限制,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13138725.html:今天我们来聊一聊docker machine ...
- 黎活明8天快速掌握android视频教程--12_文件的保存与读取
1.当前是把文件保存当前手机的app的data目录下 我们来看看操作保存文件的业务类 package contract.test.savafileapplication; import android ...