STM32 基础知识(探索者开发板)--159讲 CAN总线

这篇具有很好参考价值的文章主要介绍了STM32 基础知识(探索者开发板)--159讲 CAN总线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CAN基础知识:ISO国际标准化的串行通信协议,为了减少线束的数量

CAN特点:

a.多主控制  每个设备都可以主动发送数据

b.通信速度较快,通信距离远。最高1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps)

c.具有错误检测、错误通知和错误恢复功能

d.故障封闭功能  能发现故障,且可以把故障单元隔离出去

CAN在HAL库中的驱动代码在stm32f4xx_hal_can.c文件中

CAN的常用函数:

1)HAL_CAN_Init函数         CAN控制器的初始化
HAL_StatusTypeDef  HAL_CAN_Init(CAN_HandleTypeDef *hcan);
CAN初始化结构体如下
 typedef struct __CAN_HandleTypeDef
{
 CAN_TypeDef *Instance;           /* CAN 控制寄存器基地址 */
 CAN_InitTypeDef Init;                 /* 初始化参数结构体 */
 __IO HAL_CAN_StateTypeDef State; /* CAN 通讯状态 */
  __IO uint32_t ErrorCode;          /* CAN 通讯结果编码 */
} CAN_HandleTypeDef;
其中Init结构体
typedef struct
{
 uint32_t Prescaler; /* 分频值,可以配置为 1~1024 间的任意整数 */
 uint32_t Mode; /* can 操作模式,有效值参考 CAN_operating_mode 的描述 */
 uint32_t SyncJumpWidth; /* CAN 硬件的最大超时时间 */
 uint32_t TimeSeg1; /* CAN_time_quantum_in_bit_segment_1 */
 uint32_t TimeSeg2; /* CAN_time_quantum_in_bit_segment_2 */
 FunctionalState TimeTriggeredMode; /* 启用或禁用时间触发模式 */
 FunctionalState AutoBusOff; /* 禁止/使能软件自动断开总线的功能 */
 FunctionalState AutoWakeUp; /* 禁止/使能 CAN 的自动唤醒功能 */
 FunctionalState AutoRetransmission; /* 禁止/使能 CAN 的自动传输模式 */
 FunctionalState ReceiveFifoLocked; /* 禁止/使能 CAN 的接收 FIFO */
 FunctionalState TransmitFifoPriority; /* 禁止/使能 CAN 的发送 FIFO */
} CAN_InitTypeDef;

2)HAL_CAN_ConfigFilter 函数 配置接收过滤器函数
HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig)
参数:CAN控制句柄的指针  过滤器结构体指针
返回值:我们只关注HAL_OK的情况
过滤器结构体
typedef struct
{
 uint32_t FilterIdHigh; /* 过滤器标识符高位 */
 uint32_t FilterIdLow; /* 过滤器标识符低位 */
 uint32_t FilterMaskIdHigh; /* 过滤器掩码号高位(列表模式下,也是属于标识符) */
 uint32_t FilterMaskIdLow; /* 过滤器掩码号低位(列表模式下,也是属于标识符) */
 uint32_t FilterFIFOAssignment; /* 与过滤器组管理的 FIFO */
 uint32_t FilterBank; /* 指定过滤器组,单 CAN 为 0~13,双 CAN 可为 0~27 */
 uint32_t FilterMode; /* 过滤器的模式 标识符屏蔽位模式/标识符列表模式 */
 uint32_t FilterScale; /* 过滤器的位宽 32 位/16 位 */
 uint32_t FilterActivation; /* 禁用或者使能过滤器 */
 uint32_t SlaveStartFilterBank; /* 双 CAN 模式下,规定 CAN 的主从模式的过滤器分配 */
} CAN_FilterTypeDef;
 

3)HAL_CAN_Start函数 使能CAN控制器以接入总线进行数据收发处理
HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan)
参数:CAN控制句柄指针
返回值:只关注是否等于HAL_OK

4)HAL_CAN_ActivateNotification函数   使能CAN的各种中断
HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan,uint32_t ActiveITs)
参数:CAN的控制句柄指针    目标中断源
返回值:只关注是否等于HAL_OK

5)HAL_CAN_AddTxMessage函数  向发送邮箱添加发送报文,并激活发送请求
HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan,CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox)
参数:CAN的控制句柄指针  CAN的发送结构体  报文内容  发送邮箱编号(3选1)
返回值:只关注是否等于HAL_OK
CAN发送的结构体
typedef struct
{
 uint32_t StdId; /* 标准标识符 11 位 范围:0~0x7FF */
 uint32_t ExtId; /* 扩展标识符 29 位 范围:0~0x1FFFFFFF */
 uint32_t IDE; /* 标识符类型 CAN_ID_STD / CAN_ID_EXT */
 uint32_t RTR; /* 帧类型 CAN_RTR_DATA / CAN_RTR_REMOTE */
 uint32_t DLC; /* 帧长度 范围:0~8byte */
 FunctionalState TransmitGlobalTime; /* 时间戳是否在开始时捕获 */
} CAN_TxHeaderTypeDef;

6)HAL_CAN_GetRxMessage函数  从接收FIFO里面的输出邮箱获取到消息报文
HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[])
参数:CAN的控制句柄指针  接收FIFO(FIFO0/1) CAN的接收结构体  接收报文内容
返回值:只关注是否等于HAL_OK
CAN接收的结构体
typedef struct
{
 uint32_t StdId; /* 标准标识符 11 位 范围:0~0x7FF */
 uint32_t ExtId; /* 扩展标识符 29 位 范围:0~0x1FFFFFFF */
 uint32_t IDE; /* 标识符类型 CAN_ID_STD / CAN_ID_EXT */
 uint32_t RTR; /* 帧类型 CAN_RTR_DATA / CAN_RTR_REMOTE */
 uint32_t DLC; /* 帧长度 范围:0~8byte */
 uint32_t Timestamp; /* 在帧接收开始时开始捕获的时间戳 */
 uint32_t FilterMatchIndex; /* 过滤器匹配序号 */
} CAN_RxHeaderTypeDef;

HAL_StatusTypeDef枚举类型的值,有 4 个,分别是 HAL_OK 表示成功,HAL_ERROR 表示错误,HAL_BUSY 表示忙碌,HAL_TIMEOUT 为超时。

CAN基本驱动步骤

1.CAN参数初始化                          设置工作模式和波特率

2.使能CAN时钟和初始化引脚        HAL_CAN_MspInit()硬件配置

3.设置过滤器                                  HAL_CAN_ConfigFilter过滤器配置

4.CAN数据接收和发送                   HAL_CAN_AddTxMessage(发)/HAL_CAN_GetRxMessage(收)

5.使能中断/设NVIC/编写中断服务函数                HAL_CAN_ENABLE_IT文章来源地址https://www.toymoban.com/news/detail-797688.html

到了这里,关于STM32 基础知识(探索者开发板)--159讲 CAN总线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32f407探索者开发板(二十二)——通用定时器基本原理讲解

    STM32F40x系列总共最多有14个定时器 三种(4)STM32定时器区别 STM3 F4 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括: 16 /32 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系

    2024年02月12日
    浏览(43)
  • STM32F407ZGT6正点原子F4探索者开发板 -- 跑马灯例程

    LED0 - PF9 LED1 - PF10 PF9 = 0, LED0 亮,PF9 = 1,LED0 灭 PF10 = 0, LED1 亮,PF10 = 1,LED1 灭

    2024年02月15日
    浏览(56)
  • STM32 F407探索者移植正点原子LCD例程(CubeMx)

    先说明本次实验所使用的硬件型号,本次实验使用正点原子F407探索者V3.4版本,屏幕尺寸为4.3寸 TFTLCD。 本文章主要讲解如何移植正点原子的官方LCD代码,并不涉及太多理论知识。然后,官方的LCD代码应该是更新过了,因为之前也移植过一次其他板子的,好像也不是酱紫,所以

    2024年04月17日
    浏览(130)
  • 看野火的视频,用正点原子的板子(STM32F4探索者)做ADC读取电压实验

    使用STM32F4的ADC1通道5(PA5)来采样外部电压值(这里采样两个电压值TPAD(3.3v),GND(0v)),最后通过串口打印电压值。 由上图可以看到, ADC1 的通道 5是对应着引脚PA5的。 板子右边是GND,ADC,TPAD引脚,做实验时,把两者相连即可读电压值。 ADC时钟: 这里是用于模拟电路的时

    2024年02月09日
    浏览(44)
  • 阿里云天池 天池实验室DSW探索者版 免费GPU 天池notebook教程

    1、DSW教程 点击天池notebook,进入我的实验室 选择一个私有项目,点击编辑 集成机器学习 PAI DSW (DataScienceWorkshop)探索者版开发环境 左边文件管理,中间工作区,右边是计算资源。 在文件资源管理区的顶部还有4个按钮,从左到右分别对应的是:打开DSW Launcher启动器,新建文

    2024年02月01日
    浏览(58)
  • 应届生谈薪技巧和注意事项,怎么为自己多争取1~2k(FPGA,芯片谈薪,数字IC,嵌入式,模拟IC,FPGA探索者)

      找工作的终极目标:谈薪!谈高薪!今天【FPGA探索者】给大家分享一下谈薪的技巧和注意事项,别被HR轻易压价。   本文适用人群: 应届毕业生 。 FPGA探索者 FPGA+数字IC笔试面试,无线通信物理层及数字信号处理,半导体芯片行业求职,校招社招实习,职场趣事,行业动

    2024年01月25日
    浏览(57)
  • STM32-02-STM32基础知识

    STM32F103 STM32F103是ST公司基于ARM授权Cortex M3内核而设计的一款芯片,而 Cortex M内核 使用的是 ARM v7-M架构 ,是为了替代老旧的单片机而量身定做的一个内核,具有低成本、低功耗、实时性好、中断响应快、处理效率高等特点。 架构 、 内核 、 芯片 的关系: 架构 : (ARMv7-M)

    2024年02月03日
    浏览(41)
  • 【STM32】基础知识 第二课 初识 STM32

    ARM 公司: 只做内核设计和 IP 授权, 不参与芯片设计. 对比项 Cortex-A (Application) Cortex-R (Real-time) Cortex-M (Microcontroller) 特点 高时钟频率, 长流水线, 高性能 较高时钟频率, 较长的流水线, 实时性强 时钟频率较低, 通常较短的流水线, 超低功耗 应用场景 移动计算, 智能手机, 平板电脑

    2024年02月02日
    浏览(44)
  • 【STM32】基础知识 第五课 C 语言基础知识

    stdint.h 是从 C99 中引进的一个标准 C 库的文件. 路径: “D:MDK5.34ARMARMCCinclude” 运算符 含义 运算符 含义 按位与 ~ 按位取反 | 按位或 左移 ^ 按位异或 右移 按位与: num1 运算符 num2 结果 0 0 0 1 0 0 0 1 0 1 1 1 按位或: num1 运算符 num2 结果 0 | 0 0 1 | 0 1 0 | 1 1 1 | 1 1 按位异或: num1 运算符

    2024年02月13日
    浏览(74)
  • stm32中断的基础知识

    某些事件可能需要CPU暂停目前的程序优先处理 实现CPU暂停当前的程序并优先处理某一事件的机制称作中断 处理这一事件的程序叫做中断服务程序(Interrupt Handler) 中断的硬件实现 内部或外部信号产生中断 —程序跳转到某一特定地址(中断向量) —程序从中断向量跳转到对

    2023年04月24日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包