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

  • 42
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F407探索者开发是一款基于STM32F407芯片的开发,广泛应用于嵌入式系统开发和学习。 该开发的原理图是描述其电路连接和工作原理的图纸。原理图展示了芯片与其他电子元件之间的连接方式,以及各个电子元件之间的关系。通过原理图,我们可以理解开发各个功能模块的分布和工作原理,为后续的电路调试和开发提供了重要的参考依据。 在STM32F407探索者开发的原理图中,可以看到包括微控制器、时钟源、存储器、通信接口、传感器接口、显示屏接口等主要模块。微控制器是整个系统的核心,它负责控制和管理其他模块的工作。时钟源提供系统的时钟信号,确保各个模块同步工作。存储器模块包括闪存、RAM和EEPROM等,用于存储程序代码和数据。通信接口模块包括UART、SPI、I2C等,用于与其他设备进行数据交互。传感器接口模块用于连接各种传感器,实现对外部环境的感知和采集。显示屏接口用于连接显示屏,实现信息展示。 通过原理图,我们可以清楚地了解到各个模块之间的连接关系和信号传输方式。同时,原理图也提供了电阻、电容、晶振、电感等器件的数值信息,有助于设计人员选择合适的元件和进行电路调试。 总之,STM32F407探索者开发的原理图是一份非常重要的参考资料,它为开发者提供了设计和调试的依据,帮助开发者更好地理解和应用该开发,同时也为学习者提供了学习嵌入式系统的宝贵资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值