7、帧结束域:每一个数据帧或远程帧均由一串七个隐性位的帧结束域结尾。这样,接收节点可以正确检测到一个帧的传输结束。
现在来看看代码。CAN总线文件是stm32f10x_can.c和stm32f10x_can.h。.c文件中包含有函数的函数体,.h文件中包含有函数的声明。主要函数有:
void CAN_DeInit(CAN_TypeDef* CANx),取消初始化CAN总线外设寄存器默认的重置值。
uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct),根据CAN_InitStruct结构体中的特定的参数来初始化CAN总线的外设。
void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct),根据CAN总线过滤器结构体中的参数来初始化CAN总线外设。
void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct),用默认值来填充每个CAN_InitStruct结构体。
void CAN_SlaveStartBank(uint8_t CAN_BankNumber),为从CAN总线选择开始过滤器组。
void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState),使能或者关闭特殊CAN总线中断。
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage),启动一个消息的发送。
uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox),检查消息的发送。
void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox),取消一个发送请求。
void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber),释放一个先入先出。
uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber),返回等待消息的编号。
void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage),接收一个消息。
void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState),为CAN总线使能或者关闭某一个CANx。
uint8_t CAN_Sleep(CAN_TypeDef* CANx),进入低功耗模式。
uint8_t CAN_WakeUp(CAN_TypeDef* CANx),唤醒CAN总线。
FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG),检查指定的CAN总线标志是否被置位。
void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG),清除CAN总线的等待标志。
ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT),检查指定CAN总线中断是否发生。
void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT),清除CAN总线中断等待位。
static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit),检查CAN总线中断是否发生。
常见CAN总线使用。