[AT32L021] AT32F105的can通讯,如何查询发送邮箱是否空?

[复制链接]
2033|5
 楼主| zrmouse 发表于 2025-5-14 11:22 | 显示全部楼层 |阅读模式
如上,库函数使用。小白感谢!
 楼主| zrmouse 发表于 2025-7-8 14:46 | 显示全部楼层
uchar CAN_IsEmpty(can_type* CANx)
{
        if (CANx->tsts_bit.tm0ef)
        {
                return 1 ;
        }
        else if (CANx->tsts_bit.tm1ef)
        {
                return 1 ;
        }
        else if (CANx->tsts_bit.tm2ef)
        {
                return 1 ;
        }
        return 0 ;
}
HarmonySage 发表于 2025-7-11 19:59 | 显示全部楼层
CAN 邮箱(Mailbox)是用于存放待发送的消息的存储区,AT32F105 中可以有多个邮箱。每个邮箱都有一个状态标志,指示该邮箱是否处于空闲、忙碌或已经成功发送状态。
查询发送邮箱是否空闲的步骤:
通过查看 CAN_TSR 寄存器(Transmission Status Register)来判断邮箱是否空闲。
CAN_TSR 寄存器中的 TME 位用于表示某个发送邮箱是否空闲。
幻想收藏家 发表于 2025-7-14 16:56 | 显示全部楼层
您好!查询AT32F105的CAN发送邮箱是否为空,可以通过检查TSTAT寄存器中的TME(Transmit Mailbox Empty)位来判断。如果TME位为1,则表示发送邮箱为空。
WhisperingTrees 发表于 2025-7-15 10:00 | 显示全部楼层
可以通过检查TSTAT寄存器中的TME(Transmit Mailbox Empty)位来判断。如果TME位为1,则表示发送邮箱为空。一般都是这么干的
一点点晚风 发表于 2025-11-6 19:27 | 显示全部楼层
#include "at32f105_can.h"

// 查询CAN发送邮箱是否为空
uint8_t CAN_TxMailboxIsEmpty(CAN_Type *CANx) {
    // 检查发送邮箱空标志(三个邮箱任一为空则返回1)
    return (CANx->TSR & (CAN_TSR_TME0 | CAN_TSR_TME1 | CAN_TSR_TME2)) ? 1 : 0;
}

// 使用示例
void CAN_SendExample(CAN_Type *CANx) {
    if (CAN_TxMailboxIsEmpty(CANx)) {
        // 邮箱为空,可发送数据
        // ... 填充发送数据和标识符 ...
    }
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部