📄 stm8s_can.h
字号:
/**
******************************************************************************
* @file stm8s_can.h
* @brief This file contains all the functions for the CAN peripheral.
* @author STMicroelectronics - MCD Application Team
* @version V1.1.1
* @date 06/05/2009
******************************************************************************
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
* @image html logo.bmp
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM8S_CAN_H
#define __STM8S_CAN_H
/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
/* Exported constants --------------------------------------------------------*/
#define CAN_STDID_SIZE ((u16)0x07FF)
#define CAN_EXTID_SIZE ((u32)0x1FFFFFFF)
#define CAN_DLC_MAX ((u8)0x08)
/** @addtogroup CAN_Exported_Types
* @{
*/
/**
* @brief CAN Page Mapping
*/
typedef enum
{
CAN_Page_TxMailBox0 = ((u8) 0), /*!< CAN TX mailbox 0 reg page */
CAN_Page_TxMailBox1 = ((u8) 1), /*!< CAN TX mailbox 1 reg page */
CAN_Page_TxMailBox2 = ((u8) 5), /*!< CAN TX mailbox 2 reg page */
CAN_Page_Filter01 = ((u8) 2), /*!< CAN Filters 0 & 1 reg page*/
CAN_Page_Filter23 = ((u8) 3), /*!< CAN Filters 2 & 3 reg page*/
CAN_Page_Filter45 = ((u8) 4), /*!< CAN Filters 4 & 5 reg page*/
CAN_Page_Config = ((u8) 6), /*!< CAN Configuration control/status reg page*/
CAN_Page_RxFifo = ((u8) 7) /*!< CAN RX FIFO registers page */
}CAN_Page_TypeDef;
/**
* @brief CAN sleep constants
*/
typedef enum {
CAN_InitStatus_Failed =0, /*!< CAN initialization failed */
CAN_InitStatus_Success =! CAN_InitStatus_Failed /*!< CAN initialization OK*/
} CAN_InitStatus_TypeDef;
/**
* @brief CAN operating mode */
typedef enum
{
CAN_OperatingMode_Initialization =((u8)0x00), /*!< Initialization mode */
CAN_OperatingMode_Normal =((u8)0x01), /*!< Normal mode */
CAN_OperatingMode_Sleep =((u8)0x02) /*!< sleep mode */
}CAN_OperatingMode_TypeDef;
/**
* @brief CAN operating mode status */
typedef enum
{
CAN_ModeStatus_Failed = ((u8)0x00), /*!< CAN entring the specific mode failed */
CAN_ModeStatus_Success =! CAN_ModeStatus_Failed /*!< CAN entring the specific mode Succeed */
}CAN_ModeStatus_TypeDef;
/**
* @brief CAN Time Triggered Communication mode
*/
typedef enum
{
CAN_MasterCtrl_AllDisabled =((u8)0x00), /*!< CAN ALL Master Control Option are DISABLED */
CAN_MasterCtrl_AllEnabled =((u8)0xFC), /*!< CAN ALL Master Control Option are DISABLED */
CAN_MasterCtrl_TimeTriggerCOMMode =((u8)0x80), /*!< CAN Time Triggered Communication mode ENABLED */
CAN_MasterCtrl_AutoBusOffManagement =((u8)0x40), /*!< CAN Auto Bus Off Management ENABLED */
CAN_MasterCtrl_AutoWakeUpMode =((u8)0x20), /*!< CAN Automatic WakeUp Mode ENABLED , sleep mode is left automatically by hardware */
CAN_MasterCtrl_NoAutoReTx =((u8)0x10), /*!< CAN Non Automatic Retransmission ENABLED, MSG will be transmitted only once */
CAN_MasterCtrl_RxFifoLockedMode =((u8)0x08), /*!< CAN Recieve FIFO Locked against overrun ENABLED */
CAN_MasterCtrl_TxFifoPriority =((u8)0x04) /*!< CAN Transmit FIFO Priority driven by the request order (not by the identifier of the MSG) */
}CAN_MasterCtrl_TypeDef;
/**
* @brief CAN mode options */
typedef enum
{
CAN_Mode_Normal =((u8)0x00), /*!< normal mode */
CAN_Mode_LoopBack =((u8)0x01), /*!< loopback mode */
CAN_Mode_Silent =((u8)0x02), /*!< silent mode */
CAN_Mode_Silent_LoopBack =((u8)0x03) /*!< loopback combined with silent mode */
}CAN_Mode_TypeDef;
/**
* @brief CAN synchronisation jump width (SJW)*/
typedef enum
{
CAN_SynJumpWidth_1TimeQuantum =((u8)0x00), /*!< 1 time quantum */
CAN_SynJumpWidth_2TimeQuantum =((u8)0x40), /*!< 2 time quantum */
CAN_SynJumpWidth_3TimeQuantum =((u8)0x80), /*!< 3 time quantum */
CAN_SynJumpWidth_4TimeQuantum =((u8)0xC0) /*!< 4 time quantum */
}CAN_SynJumpWidth_TypeDef;
/**
* @brief time quantum in bit segment 1 */
typedef enum
{
CAN_BitSeg1_1TimeQuantum =((u8)0x00), /*!< 1 time quantum */
CAN_BitSeg1_2TimeQuantum =((u8)0x01), /*!< 2 time quantum */
CAN_BitSeg1_3TimeQuantum =((u8)0x02), /*!< 3 time quantum */
CAN_BitSeg1_4TimeQuantum =((u8)0x03) , /*!< 4 time quantum */
CAN_BitSeg1_5TimeQuantum =((u8)0x04) , /*!< 5 time quantum */
CAN_BitSeg1_6TimeQuantum =((u8)0x05) , /*!< 6 time quantum */
CAN_BitSeg1_7TimeQuantum =((u8)0x06) , /*!< 7 time quantum */
CAN_BitSeg1_8TimeQuantum =((u8)0x07), /*!< 8 time quantum */
CAN_BitSeg1_9TimeQuantum =((u8)0x08), /*!< 9 time quantum */
CAN_BitSeg1_10TimeQuantum =((u8)0x09), /*!< 10 time quantum */
CAN_BitSeg1_11TimeQuantum =((u8)0x0A), /*!< 11 time quantum */
CAN_BitSeg1_12TimeQuantum =((u8)0x0B), /*!< 12 time quantum */
CAN_BitSeg1_13TimeQuantum =((u8)0x0C), /*!< 13 time quantum */
CAN_BitSeg1_14TimeQuantum =((u8)0x0D), /*!< 14 time quantum */
CAN_BitSeg1_15TimeQuantum =((u8)0x0E), /*!< 15 time quantum */
CAN_BitSeg1_16TimeQuantum =((u8)0x0F) /*!< 16 time quantum */
}CAN_BitSeg1_TypeDef;
/**
* @brief time quantum in bit segment 2 */
typedef enum
{
CAN_BitSeg2_1TimeQuantum = ((u8)0x00), /*!< 1 time quantum */
CAN_BitSeg2_2TimeQuantum = ((u8)0x10), /*!< 2 time quantum */
CAN_BitSeg2_3TimeQuantum = ((u8)0x20), /*!< 3 time quantum */
CAN_BitSeg2_4TimeQuantum = ((u8)0x30), /*!< 4 time quantum */
CAN_BitSeg2_5TimeQuantum = ((u8)0x40), /*!< 5 time quantum */
CAN_BitSeg2_6TimeQuantum = ((u8)0x50), /*!< 6 time quantum */
CAN_BitSeg2_7TimeQuantum = ((u8)0x60), /*!< 7 time quantum */
CAN_BitSeg2_8TimeQuantum = ((u8)0x70) /*!< 8 time quantum */
}CAN_BitSeg2_TypeDef;
/**
* @brief CAN filter number */
typedef enum
{
CAN_FilterNumber_0 = ((u8)0x00), /*!< Filter number 0 */
CAN_FilterNumber_1 = ((u8)0x01), /*!< Filter number 1 */
CAN_FilterNumber_2 = ((u8)0x02), /*!< Filter number 2 */
CAN_FilterNumber_3 = ((u8)0x03), /*!< Filter number 3 */
CAN_FilterNumber_4 = ((u8)0x04), /*!< Filter number 4 */
CAN_FilterNumber_5 = ((u8)0x05) /*!< Filter number 5 */
}CAN_FilterNumber_TypeDef;
/**
* @brief CAN filter mode */
typedef enum
{
CAN_FilterMode_IdMask = ((u8)0x00), /*!< id/mask mode */
CAN_FilterMode_IdMask_IdList = ((u8)0x10), /*!< Id/Mask mode First and IdList mode second */
CAN_FilterMode_IdList_IdMask = ((u8)0x11), /*!< IdList mode First and IdMask mode second */
CAN_FilterMode_IdList = ((u8)0x01) /*!< identifier list mode */
}CAN_FilterMode_TypeDef;
/**
* @brief CAN filter scale */
typedef enum
{
CAN_FilterScale_8Bit =((u8)0x00), /*!< 8-bit filter scale */
CAN_FilterScale_16_8Bit =((u8)0x02), /*!< 16/8-bit filter scale */
CAN_FilterScale_16Bit =((u8)0x04), /*!< 16-bit filter scale */
CAN_FilterScale_32Bit =((u8)0x06) /*!< 32-bit filter scale */
}CAN_FilterScale_TypeDef;
/**
* @brief CAN Tx mailboxes*/
typedef enum
{
CAN_TransmitMailBox_0 = ((u8) 0x00), /*!< CAN TX mailbox 0 reg page */
CAN_TransmitMailBox_1 = ((u8) 0x01), /*!< CAN TX mailbox 1 reg page */
CAN_TransmitMailBox_2 = ((u8) 0x05) /*!< CAN TX mailbox 2 reg page */
}CAN_TransmitMailBox_TypeDef;
/**
* @brief CAN Pending Messages number*/
typedef enum
{
CAN_NbrPendingMessage_0 = ((u8)0x00), /*!< No Msg Pending */
CAN_NbrPendingMessage_1 = ((u8)0x01), /*!< 1 Msg Pending */
CAN_NbrPendingMessage_2 = ((u8)0x02), /*!< 2 Msg Pending */
CAN_NbrPendingMessage_3 = ((u8)0x03) /*!< 3 Msg Pending */
}CAN_NbrPendingMessage_TypeDef;
/**
* @brief CAN identifier type */
typedef enum
{
CAN_Id_Standard =((u8)0x00), /*!< Standard Id */
CAN_Id_Extended =((u8)0x40) /*!< Extended Id */
}CAN_Id_TypeDef;
/**
* @brief CAN remote transmission request */
typedef enum
{
CAN_RTR_Data = ((u8)0x00), /*!< Data frame */
CAN_RTR_Remote = ((u8)0x20) /*!< Remote frame */
}CAN_RTR_TypeDef;
/**
* @brief CAN transmit Status */
typedef enum
{
CAN_TxStatus_Failed =((u8)0xF0), /*!< CAN transmission failed */
CAN_TxStatus_Ok =((u8)0xF1), /*!< CAN transmission succeeded */
CAN_TxStatus_Pending =((u8)0xF2), /*!< CAN transmission pending */
CAN_TxStatus_NoMailBox =((u8)0xF4), /*!< CAN cell did not provide an empty mailbox */
CAN_TxStatus_MailBoxEmpty =((u8)0xF5), /*!< CAN Tx mailbox is Empty */
CAN_TxStatus_MailBox0Ok =((u8)0x00), /*!< CAN transmission succeeded by mail box 1*/
CAN_TxStatus_MailBox1Ok =((u8)0x01), /*!< CAN transmission succeeded by mail box 2*/
CAN_TxStatus_MailBox2Ok =((u8)0x05) /*!< CAN transmission succeeded by mail box 3*/
}CAN_TxStatus_TypeDef;
/**
* @brief CAN sleep Status */
typedef enum
{
CAN_Sleep_Failed = ((u8)0x00), /*!< CAN did not enter the sleep mode */
CAN_Sleep_Ok = ((u8)0x01) /*!< CAN entered the sleep mode */
}CAN_Sleep_TypeDef;
/**
* @brief CAN wake up status */
typedef enum
{
CAN_WakeUp_Failed = ((u8)0x00), /*!< CAN did not leave the sleep mode */
CAN_WakeUp_Ok = ((u8)0x01) /*!< CAN leaved the sleep mode */
}CAN_WakeUp_TypeDef;
/**
* @brief CAN Clock Source */
typedef enum
{
CAN_ClockSource_Internal = ((u8)0x00), /*!< CAN Clock source is fMaster */
CAN_ClockSource_External = ((u8)0x80) /*!< CAN Clock source is External Xtal */
}CAN_ClockSource_TypeDef;
/**
* @brief CAN flags */
typedef enum
{
/* if the flag is 0x3XXX, it means that it can be got (CAN_GetFlagStatus) and Cleared (CAN_ClearFlag) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -