你好,$ R% D3 Z! S, k. R% H' A* V, o 我有開個專案MCU選用的是STM32F091CBTx 包含CANBUS的應用, 直接下載到在NUCLEO64(STM32F091RC)的時候,CAN_TX (PA12)是可以發出CAN的訊息出來 ( y; N Z) [5 G0 H( O' D7 r 可是當我把同一個專案直接下載到STM32F091CBTx應用板上的時候,CAN_TX (PA12)發出CAN的訊息卻是不正確的) ?. {, q% T2 J' m3 ?2 L# ? 請問一下,這是什麼原因' I7 C1 V$ [0 n3 J1 q( h! z) V 程式碼如下4 h/ z5 J5 ~5 Z, D, `! `) _' R /* CAN init function */# x R0 W' Z2 B* _9 s$ y void MX_CAN_Init(void) R3 m0 I$ h7 ]# w8 g$ J- |; e( G1 N { R9 R! I% [* R# Z7 x CAN_FilterConfTypeDef sFilterConfig; hcan.Instance = CAN;$ |8 D: i* G* Z0 P! ^# ^# @ hcan.Init.Prescaler = 3;$ s0 o# E: J& Q: E1 B f hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SJW = CAN_SJW_1TQ; hcan.Init.BS1 = CAN_BS1_10TQ;2 j4 \. W1 d1 ^. G( P& w7 H7 m hcan.Init.BS2 = CAN_BS2_4TQ;: z: w0 i t5 Z hcan.Init.TTCM = DISABLE; hcan.Init.ABOM = ENABLE; hcan.Init.AWUM = DISABLE; hcan.Init.NART = DISABLE; hcan.Init.RFLM = DISABLE;' T8 n! A ~7 F" F. m2 G hcan.Init.TXFP = DISABLE; if (HAL_CAN_Init(&hcan) != HAL_OK)6 J( N" D& P' Y5 ]" Z" f( n. A {* O" q9 o# [" l- W _Error_Handler(__FILE__, __LINE__);* ?! o; k% h) B5 r# \# s" h1 H! g& ? }+ i' o& V6 R, f2 @5 Z sFilterConfig.FilterNumber = 0; sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;4 F; F' t5 W/ A2 S& D! x; N8 E sFilterConfig.FilterIdHigh = 0x0000;& B7 x: ] I/ q2 R( U3 B$ P& I sFilterConfig.FilterIdLow = 0x0000; sFilterConfig.FilterMaskIdHigh = 0x0000; sFilterConfig.FilterMaskIdLow = 0x0000; sFilterConfig.FilterFIFOAssignment = 0; sFilterConfig.FilterActivation = ENABLE; sFilterConfig.BankNumber = 0; HAL_CAN_ConfigFilter(&hcan, &sFilterConfig); } # G/ d% c) T3 }8 S0 {8 ?* E1 D //========================================== + Z& W4 }+ U! i: P+ }. e8 k9 Y3 h void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) {$ B% a) W3 G3 \ GPIO_InitTypeDef GPIO_InitStruct; if(canHandle->Instance==CAN) { /* USER CODE BEGIN CAN_MspInit 0 */& W% i l3 B, \8 y7 c' w /* USER CODE END CAN_MspInit 0 */ /* CAN clock enable */+ R- R9 `* I# C I4 d A3 m% ]# {: r# c; } # P$ h. J" m' j# c9 p3 k) f /**CAN GPIO Configuration & k* s" e# o$ z4 x2 ^1 D PA11 ------> CAN_RX PA12 ------> CAN_TX */: }, V V" }7 S& V GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;7 I2 ~& h: f9 s GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP;0 |) z- M8 h% a( H- d GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;2 D0 f3 ^! C" o+ w GPIO_InitStruct.Alternate = GPIO_AF4_CAN;& a$ B2 g+ I) }* e" j4 G HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); __HAL_RCC_CAN1_CLK_ENABLE();, j0 f/ [$ O+ C8 x9 I /* CAN interrupt Init */ HAL_NVIC_SetPriority(CEC_CAN_IRQn, 0, 0); HAL_NVIC_EnableIRQ(CEC_CAN_IRQn);: Z# g# G3 j5 S4 z% X, F. l /* USER CODE BEGIN CAN_MspInit 1 */ 9 i1 T p2 S" h8 X /* USER CODE END CAN_MspInit 1 */" u9 p! M/ M1 X( a/ R- o } } 8 J; R6 @3 l7 J# L6 A, P0 \ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle) {; |% k7 [ j" P3 f# w* @0 ]* f8 l if(canHandle->Instance==CAN)2 |: F x' Q7 D8 @) }: i {3 n, v+ _# } J /* USER CODE BEGIN CAN_MspDeInit 0 */ 7 O( h4 p9 v4 n2 T! l* v# y /* USER CODE END CAN_MspDeInit 0 */# h, q; o5 f, {! k& A /* Peripheral clock disable */ __HAL_RCC_CAN1_CLK_DISABLE(); /**CAN GPIO Configuration * Y" l, |, ^* x+ Y' ~0 X, n PA11 ------> CAN_RX2 D5 z V- @' a7 [, }, j+ Z/ D: l PA12 ------> CAN_TX */# j8 }2 B+ B3 k5 B HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);. E3 j) J2 n! ], w F$ }5 D1 r. n+ s 9 Q7 P9 R; i2 | /* CAN interrupt Deinit */ HAL_NVIC_DisableIRQ(CEC_CAN_IRQn); /* USER CODE BEGIN CAN_MspDeInit 1 */, \ O; l* D) F! M7 p, z) V: I & I: J3 y6 V# Y$ O% C /* USER CODE END CAN_MspDeInit 1 */ } } ( |' D8 O( Y2 y& C* h/ h //===================================================. I4 z+ ]3 G k int main(void) {5 R3 C9 P) y$ S7 C3 T) f: h /* USER CODE BEGIN 1 */ 4 I2 t; n" ?; a+ R* z /* USER CODE END 1 */# {" d0 _: E* z* e 3 T% U: B! g. y& H- b9 S /* MCU Configuration----------------------------------------------------------*/% W* _3 I* a8 t1 \8 ?2 U& c /* Reset of all peripherals, Initializes the Flash interface and the Systick. */) E, R7 ^) O3 j Y1 z6 S3 w HAL_Init();8 f v1 F3 W' w; z0 `" L& w' S- a * Q2 b! N# Q6 R% `& a/ {4 G9 H, q SystemClock_Config();. k$ G1 r4 u! b! u /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_CAN_Init();- M: w1 X) e7 ^/ O /* USER CODE BEGIN 2 */- q; Z1 J' h- z: V3 J8 q4 O CANTxMessage.DLC = 8;- m4 {6 |# k, t3 ~" R: n CANTxMessage.IDE = CAN_ID_STD; CANTxMessage.StdId = 0x07; CANTxMessage.RTR = CAN_RTR_DATA; CANTxMessage.Data[0] = 0; CANTxMessage.Data[1] = 10;0 V0 X' p; [0 B8 Z# b CANTxMessage.Data[2] = 20; CANTxMessage.Data[3] = 30;7 t& _4 B% S5 \4 h. P' S CANTxMessage.Data[4] = 40; CANTxMessage.Data[5] = 50;9 B1 [6 z9 C) L" _$ ^4 b7 t R: n" a CANTxMessage.Data[6] = 60; CANTxMessage.Data[7] = 70;" `3 G8 C) K2 k+ v /* USER CODE END 2 */' N/ z8 K' R& _1 m; Z hcan.pTxMsg = &CANTxMessage; 6 P y+ v/ s( F& Q8 S7 ] while (1) { /* USER CODE END WHILE */: [8 S* O/ e# p, G: i* u6 a HAL_Delay(100); HAL_CAN_Transmit(&hcan,100); /* USER CODE BEGIN 3 */% I1 C( O* S8 h; b* b' J8 u 2 N% V% U+ c! G } 4 I) U4 ?% C/ q* { r% O } - q2 y& T. M# f /** System Clock Configuration */0 u5 _8 c& P8 M7 c8 ^, s void SystemClock_Config(void)! [5 h# [. v& |! n { D$ K! E3 f% ^ M( c( E: |/ ^ RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;: \. }- o3 x1 x/ J5 b$ I5 _ - ~! @' Z4 A- M" i- I( G5 V0 T /**Initializes the CPU, AHB and APB busses clocks 1 E* p- ^8 [' k1 O& i9 t */* C& z! o" [2 q6 u RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;; g5 a8 W+ j( y RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;1 s5 c: R# ~5 `& N! ~ RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }; M( `0 Z$ }4 |9 e7 g& S# { ! V7 J Z6 Y; Q5 e1 N6 a% [* _% G /**Initializes the CPU, AHB and APB busses clocks * m0 Z: d9 s& ~( Z0 c */* l3 @6 L. F* P7 p. G5 S, K RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK, K8 N! r+ i# X* R" Z$ C |RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;# A6 ], u' B6 h8 Z: X RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;, B" |% i# `; r d2 S2 S if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { b4 m5 j# a1 F! E2 X( B _Error_Handler(__FILE__, __LINE__); }7 o% p7 r: V; A, X : a. H. z; o2 C/ ^# v$ z6 _. c /**Configure the Systick interrupt time 8 `8 B0 R: ]8 d* ?1 g */1 K; N! X' U$ B7 ? HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);/ e. A% o3 [/ k /**Configure the Systick */9 u0 h, ^" k" A. Z- h& u& {* p3 a HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);, v$ }) Q1 }3 \2 y' y . ?# G; Q9 ]3 U% }" S; W8 I" @7 ? /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);2 }0 g0 Z, V; _8 b }5 v% W8 }; o. { |
【管管推荐】STM32经验分享篇
STM32固件库分享,超全系列整理
三创电子(Tcreate)-STM32F030核心板代码
STM32F0 ADC(DMA中断)多通道,注释超详细
FreeRTOS在STM32F030上的移植
基于STM32移植而引发的疑问经验分享
分享STM32F051中文参考手册(重制书签版)
游名:STM32F0+Trinamic智能步进驱动芯片TMC5160(最高20A)参考原...
【MCU实战经验】+STM32F030的步进电机加减速
STM32F0的中文技术参考手册(标签处理过)