📄 stm32f10x_can.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 KICKSTART 26/Dec/2008 18:23:37 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = thumb #
# Endian = little #
# Stack alignment = 4 #
# Source file = F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_c #
# an.c #
# Command line = F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_c #
# an.c -lCN F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3 #
# 210E-EVAL\IAR\OS-Probe\Flash\List\ -o #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\Obj\ -z6 --no_unroll --no_inline #
# --no_tbaa --no_scheduling --debug --cpu_mode thumb #
# --endian little --cpu cortex-M3 --stack_align 4 -e #
# --fpu None --dlib_config "E:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 #
# Kickstart\arm\LIB\dl7mptnnl8n.h" -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ #
# ST\STM3210E-EVAL\IAR\OS-Probe\..\BSP\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\CPU\ST\STM32\inc\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-CPU\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-CPU\ARM-Cortex-M3\IAR #
# \ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E- #
# EVAL\IAR\OS-Probe\..\..\..\..\..\uC-LCD\Source\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-LIB\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uCOS-II\Ports\ARM-Cortex #
# -M3\Generic\IAR\ -I F:\PROJECT\STM32_UCOSII\EvalBoar #
# ds\ST\STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\..\uCOS #
# -II\Source\ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ST #
# \STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\..\uC-Probe\ #
# Target\Communication\Generic\RS-232\Source\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Communic #
# ation\Generic\RS-232\Ports\ST\STM32\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Communic #
# ation\Generic\Source\ -I F:\PROJECT\STM32_UCOSII\Eva #
# lBoards\ST\STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\.. #
# \uC-Probe\Target\Plugins\uCOS-II\ -I "E:\Program #
# Files\IAR Systems\Embedded Workbench 4.0 #
# Kickstart\arm\INC\" #
# List file = F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\List\stm32f10x_can.lst #
# Object file = F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\Obj\stm32f10x_can.r79 #
# #
# #
##############################################################################
F:\PROJECT\STM32_UCOSII\CPU\ST\STM32\src\stm32f10x_can.c
1 /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
2 * File Name : stm32f10x_can.c
3 * Author : MCD Application Team
4 * Version : V2.0
5 * Date : 05/23/2008
6 * Description : This file provides all the CAN firmware functions.
7 ********************************************************************************
8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
12 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
14 * FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED
15 * IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.
16 *******************************************************************************/
17
18 /* Includes ------------------------------------------------------------------*/
19 #include "stm32f10x_can.h"
20 #include "stm32f10x_rcc.h"
21
22 /* Private typedef -----------------------------------------------------------*/
23
24 /* Private define ------------------------------------------------------------*/
25 /* CAN Master Control Register bits */
26 #define CAN_MCR_INRQ ((u32)0x00000001) /* Initialization request */
27 #define CAN_MCR_SLEEP ((u32)0x00000002) /* Sleep mode request */
28 #define CAN_MCR_TXFP ((u32)0x00000004) /* Transmit FIFO priority */
29 #define CAN_MCR_RFLM ((u32)0x00000008) /* Receive FIFO locked mode */
30 #define CAN_MCR_NART ((u32)0x00000010) /* No automatic retransmission */
31 #define CAN_MCR_AWUM ((u32)0x00000020) /* Automatic wake up mode */
32 #define CAN_MCR_ABOM ((u32)0x00000040) /* Automatic bus-off management */
33 #define CAN_MCR_TTCM ((u32)0x00000080) /* time triggered communication */
34
35 /* CAN Master Status Register bits */
36 #define CAN_MSR_INAK ((u32)0x00000001) /* Initialization acknowledge */
37 #define CAN_MSR_WKUI ((u32)0x00000008) /* Wake-up interrupt */
38 #define CAN_MSR_SLAKI ((u32)0x00000010) /* Sleep acknowledge interrupt */
39
40 /* CAN Transmit Status Register bits */
41 #define CAN_TSR_RQCP0 ((u32)0x00000001) /* Request completed mailbox0 */
42 #define CAN_TSR_TXOK0 ((u32)0x00000002) /* Transmission OK of mailbox0 */
43 #define CAN_TSR_ABRQ0 ((u32)0x00000080) /* Abort request for mailbox0 */
44 #define CAN_TSR_RQCP1 ((u32)0x00000100) /* Request completed mailbox1 */
45 #define CAN_TSR_TXOK1 ((u32)0x00000200) /* Transmission OK of mailbox1 */
46 #define CAN_TSR_ABRQ1 ((u32)0x00008000) /* Abort request for mailbox1 */
47 #define CAN_TSR_RQCP2 ((u32)0x00010000) /* Request completed mailbox2 */
48 #define CAN_TSR_TXOK2 ((u32)0x00020000) /* Transmission OK of mailbox2 */
49 #define CAN_TSR_ABRQ2 ((u32)0x00800000) /* Abort request for mailbox2 */
50 #define CAN_TSR_TME0 ((u32)0x04000000) /* Transmit mailbox 0 empty */
51 #define CAN_TSR_TME1 ((u32)0x08000000) /* Transmit mailbox 1 empty */
52 #define CAN_TSR_TME2 ((u32)0x10000000) /* Transmit mailbox 2 empty */
53
54 /* CAN Receive FIFO 0 Register bits */
55 #define CAN_RF0R_FULL0 ((u32)0x00000008) /* FIFO 0 full */
56 #define CAN_RF0R_FOVR0 ((u32)0x00000010) /* FIFO 0 overrun */
57 #define CAN_RF0R_RFOM0 ((u32)0x00000020) /* Release FIFO 0 output mailbox */
58
59 /* CAN Receive FIFO 1 Register bits */
60 #define CAN_RF1R_FULL1 ((u32)0x00000008) /* FIFO 1 full */
61 #define CAN_RF1R_FOVR1 ((u32)0x00000010) /* FIFO 1 overrun */
62 #define CAN_RF1R_RFOM1 ((u32)0x00000020) /* Release FIFO 1 output mailbox */
63
64 /* CAN Error Status Register bits */
65 #define CAN_ESR_EWGF ((u32)0x00000001) /* Error warning flag */
66 #define CAN_ESR_EPVF ((u32)0x00000002) /* Error passive flag */
67 #define CAN_ESR_BOFF ((u32)0x00000004) /* Bus-off flag */
68
69 /* CAN Mailbox Transmit Request */
70 #define CAN_TMIDxR_TXRQ ((u32)0x00000001) /* Transmit mailbox request */
71
72 /* CAN Filter Master Register bits */
73 #define CAN_FMR_FINIT ((u32)0x00000001) /* Filter init mode */
74
75
76 /* Private macro -------------------------------------------------------------*/
77 /* Private variables ---------------------------------------------------------*/
78 /* Private function prototypes -----------------------------------------------*/
79 static ITStatus CheckITStatus(u32 CAN_Reg, u32 It_Bit);
80
81 /* Private functions ---------------------------------------------------------*/
82 /*******************************************************************************
83 * Function Name : CAN_DeInit
84 * Description : Deinitializes the CAN peripheral registers to their default
85 * reset values.
86 * Input : None.
87 * Output : None.
88 * Return : None.
89 *******************************************************************************/
90 void CAN_DeInit(void)
91 {
92 /* Enable CAN reset state */
93 RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN, ENABLE);
94 /* Release CAN from reset state */
95 RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN, DISABLE);
96 }
97
98 /*******************************************************************************
99 * Function Name : CAN_Init
100 * Description : Initializes the CAN peripheral according to the specified
101 * parameters in the CAN_InitStruct.
102 * Input : CAN_InitStruct: pointer to a CAN_InitTypeDef structure that
103 contains the configuration information for the CAN peripheral.
104 * Output : None.
105 * Return : Constant indicates initialization succeed which will be
106 * CANINITFAILED or CANINITOK.
107 *******************************************************************************/
108 u8 CAN_Init(CAN_InitTypeDef* CAN_InitStruct)
109 {
110 u8 InitStatus = 0;
111 u16 WaitAck;
112
113 /* Check the parameters */
114 assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TTCM));
115 assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_ABOM));
116 assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_AWUM));
117 assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_NART));
118 assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_RFLM));
119 assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TXFP));
120 assert_param(IS_CAN_MODE(CAN_InitStruct->CAN_Mode));
121 assert_param(IS_CAN_SJW(CAN_InitStruct->CAN_SJW));
122 assert_param(IS_CAN_BS1(CAN_InitStruct->CAN_BS1));
123 assert_param(IS_CAN_BS2(CAN_InitStruct->CAN_BS2));
124 assert_param(IS_CAN_PRESCALER(CAN_InitStruct->CAN_Prescaler));
125
126 /* Request initialisation */
127 CAN->MCR = CAN_MCR_INRQ;
128
129 /* ...and check acknowledged */
130 if ((CAN->MSR & CAN_MSR_INAK) == 0)
131 {
132 InitStatus = CANINITFAILED;
133 }
134 else
135 {
136 /* Set the time triggered communication mode */
137 if (CAN_InitStruct->CAN_TTCM == ENABLE)
138 {
139 CAN->MCR |= CAN_MCR_TTCM;
140 }
141 else
142 {
143 CAN->MCR &= ~CAN_MCR_TTCM;
144 }
145
146 /* Set the automatic bus-off management */
147 if (CAN_InitStruct->CAN_ABOM == ENABLE)
148 {
149 CAN->MCR |= CAN_MCR_ABOM;
150 }
151 else
152 {
153 CAN->MCR &= ~CAN_MCR_ABOM;
154 }
155
156 /* Set the automatic wake-up mode */
157 if (CAN_InitStruct->CAN_AWUM == ENABLE)
158 {
159 CAN->MCR |= CAN_MCR_AWUM;
160 }
161 else
162 {
163 CAN->MCR &= ~CAN_MCR_AWUM;
164 }
165
166 /* Set the no automatic retransmission */
167 if (CAN_InitStruct->CAN_NART == ENABLE)
168 {
169 CAN->MCR |= CAN_MCR_NART;
170 }
171 else
172 {
173 CAN->MCR &= ~CAN_MCR_NART;
174 }
175
176 /* Set the receive FIFO locked mode */
177 if (CAN_InitStruct->CAN_RFLM == ENABLE)
178 {
179 CAN->MCR |= CAN_MCR_RFLM;
180 }
181 else
182 {
183 CAN->MCR &= ~CAN_MCR_RFLM;
184 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -