你好, 我有開個專案MCU選用的是STM32F091CBTx 包含CANBUS的應用,# O9 i% b8 @; o% b b 直接下載到在NUCLEO64(STM32F091RC)的時候,CAN_TX (PA12)是可以發出CAN的訊息出來 可是當我把同一個專案直接下載到STM32F091CBTx應用板上的時候,CAN_TX (PA12)發出CAN的訊息卻是不正確的 請問一下,這是什麼原因. d. u- _) C7 _ |' {" P 5 j2 d# u! J5 W( @: c 程式碼如下 /* CAN init function */ void MX_CAN_Init(void)0 e" d5 q' Y, A { CAN_FilterConfTypeDef sFilterConfig;& |( Q" r, p$ j. D6 i0 K% b5 M hcan.Instance = CAN; hcan.Init.Prescaler = 3;5 _; Z4 [4 X+ w% H2 ` hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SJW = CAN_SJW_1TQ; hcan.Init.BS1 = CAN_BS1_10TQ; hcan.Init.BS2 = CAN_BS2_4TQ; hcan.Init.TTCM = DISABLE;: i2 q4 t8 n7 q$ ~& n! S hcan.Init.ABOM = ENABLE; hcan.Init.AWUM = DISABLE;. V2 V' a# W9 d# ]6 I" \ hcan.Init.NART = DISABLE;5 G, ~. F! F; t" S# E hcan.Init.RFLM = DISABLE; hcan.Init.TXFP = DISABLE;5 w6 q* `1 N: D% O8 ~ if (HAL_CAN_Init(&hcan) != HAL_OK) {0 M6 N7 r C% g& T9 c _Error_Handler(__FILE__, __LINE__); }* W9 n/ M: E! R w+ S! k B# Y + w) F$ Y- ]! p* r( V, J0 L! J sFilterConfig.FilterNumber = 0; sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; sFilterConfig.FilterIdHigh = 0x0000; sFilterConfig.FilterIdLow = 0x0000;' F3 s1 c, l; j+ X sFilterConfig.FilterMaskIdHigh = 0x0000; sFilterConfig.FilterMaskIdLow = 0x0000; sFilterConfig.FilterFIFOAssignment = 0;$ o# W7 P# `4 u( g H2 ~+ \: ~+ i sFilterConfig.FilterActivation = ENABLE; sFilterConfig.BankNumber = 0; HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);" j7 z$ [$ Z% W. ]+ d5 G }4 E: |) m+ |3 K3 _2 Y //========================================== void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) { : n4 v- {; E; r ?2 R& | GPIO_InitTypeDef GPIO_InitStruct; if(canHandle->Instance==CAN)2 S9 N8 c% d6 j/ n { /* USER CODE BEGIN CAN_MspInit 0 */0 }0 ] U6 L6 l, A0 g ; {7 K9 R5 z3 X /* USER CODE END CAN_MspInit 0 */ /* CAN clock enable */3 U+ {" w$ Q) M2 R /**CAN GPIO Configuration 4 I0 a8 L$ |" q h: k5 Z" X# T PA11 ------> CAN_RX PA12 ------> CAN_TX */ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;3 d: n5 K8 z1 R1 [: y/ j( m GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;3 b7 h+ g* O- U% w3 E GPIO_InitStruct.Pull = GPIO_PULLUP;$ f% B/ i" T0 e g* l9 Z" N5 _6 O' c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;" }- ?* D, J! L+ Z$ w GPIO_InitStruct.Alternate = GPIO_AF4_CAN;% X4 w8 V/ _$ O HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); __HAL_RCC_CAN1_CLK_ENABLE();( Q# D/ p1 |& X% N g /* CAN interrupt Init */ HAL_NVIC_SetPriority(CEC_CAN_IRQn, 0, 0); HAL_NVIC_EnableIRQ(CEC_CAN_IRQn); /* USER CODE BEGIN CAN_MspInit 1 */ /* USER CODE END CAN_MspInit 1 */6 D2 J" [2 r3 N }0 F0 x* r+ k4 l) b6 M6 C2 W }# I5 v8 j6 z1 {8 G+ {) v% v 4 \( b S' g& C6 I7 {1 I ^ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle) { if(canHandle->Instance==CAN)/ I9 I# C2 ~3 R7 M { /* USER CODE BEGIN CAN_MspDeInit 0 */ /* USER CODE END CAN_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_CAN1_CLK_DISABLE(); /**CAN GPIO Configuration - r) x4 z; u6 z; N PA11 ------> CAN_RX PA12 ------> CAN_TX */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12); ; Q9 r# Y$ w5 u3 E `% c /* CAN interrupt Deinit */& E, H8 n- c/ I w' T HAL_NVIC_DisableIRQ(CEC_CAN_IRQn); /* USER CODE BEGIN CAN_MspDeInit 1 */ * Q/ {; W* t4 \$ [+ j5 \ /* USER CODE END CAN_MspDeInit 1 */ }2 @0 `7 U [! X/ X4 ? } //===================================================1 Z8 k8 k8 C+ K$ O' H int main(void) { - `, a; u# {. D/ D4 G# K9 _& m" C /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/! ^/ i* S6 j" C6 n& j* { 0 n9 s% Q+ I$ Q /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); SystemClock_Config(); /* Initialize all configured peripherals */; G C& r( O0 g! F4 s7 U" O( ] MX_GPIO_Init();, \! l+ h7 V+ u/ s$ m MX_CAN_Init(); /* USER CODE BEGIN 2 */ CANTxMessage.DLC = 8; CANTxMessage.IDE = CAN_ID_STD; CANTxMessage.StdId = 0x07;& e2 N2 _& @! R- \+ N CANTxMessage.RTR = CAN_RTR_DATA;+ y: I; r0 {, A. @6 i1 U CANTxMessage.Data[0] = 0;: F! t% r3 ]! O \ CANTxMessage.Data[1] = 10;% e: U( \- p1 j& d( i3 J3 ?. S CANTxMessage.Data[2] = 20; CANTxMessage.Data[3] = 30; CANTxMessage.Data[4] = 40; CANTxMessage.Data[5] = 50;! S' d4 Z; Z5 ?$ i CANTxMessage.Data[6] = 60; CANTxMessage.Data[7] = 70; /* USER CODE END 2 */7 d, O# S8 v- x' A' ^ hcan.pTxMsg = &CANTxMessage;8 j6 \3 _9 Y. ]1 `" F while (1)# Q& \' U( n7 q' N+ R6 ?; _ {8 w# {9 d3 R: A5 k% Q /* USER CODE END WHILE */! u# v I9 B c* ] HAL_Delay(100);6 t9 ]1 h8 V0 j; J' |5 W { HAL_CAN_Transmit(&hcan,100); /* USER CODE BEGIN 3 */& [4 t/ J' C9 g6 _ }6 W- N& |1 H+ ?8 B 2 _ ^' A( W* h6 ` H" i9 E" S }, m3 P3 |+ p( N& n 4 Q' U/ V, _+ x$ T! U /** System Clock Configuration4 B% J0 o) H) h" f */ void SystemClock_Config(void)7 x" b0 f1 m% D) o5 Y+ v {; H1 D# z* O$ y! r! T RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;' X% X7 z. h3 L: }+ s2 O $ \9 y; |0 m: Z0 N) R0 f- o3 ~0 i2 _5 Q /**Initializes the CPU, AHB and APB busses clocks 8 E, l7 B+ N3 i/ \# M3 b */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;- k' x+ k% P+ D2 ?( u RCC_OscInitStruct.HSEState = RCC_HSE_ON;6 u1 f+ d7 f4 |. W9 x7 z4 F" ]7 T& q: [ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;$ |! a" H* P* C& Z/ ~ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;$ c3 s5 U9 B# T if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } , T q/ n2 g* O' b& D" J3 O /**Initializes the CPU, AHB and APB busses clocks 6 O# u* y4 ]' a5 [ */. I7 ?9 V8 _) [$ ?; R' E RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1;! G% b$ z5 c3 n; K- C RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; * E% z" e+ e, N' `* x# k) [! ] if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)" Y R- |0 a, i4 N. ]# ` `2 o { _Error_Handler(__FILE__, __LINE__);8 ^6 I) i; l7 s! B3 |; j. d/ Z }' q3 |) F$ x9 A3 g /**Configure the Systick interrupt time 3 a8 _1 ?1 D/ Y: W$ X" _ */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); % R0 A9 W. u/ A0 {7 F /**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);8 [1 Q3 y6 W1 e# I: J. S p /* SysTick_IRQn interrupt configuration */& r9 x* U; M: \1 e HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);5 V6 ?$ a- H) Y } |
STM32固件库分享,超全系列整理
三创电子(Tcreate)-STM32F030核心板代码
STM32F0 ADC(DMA中断)多通道,注释超详细
FreeRTOS在STM32F030上的移植
基于STM32移植而引发的疑问经验分享
分享STM32F051中文参考手册(重制书签版)
游名:STM32F0+Trinamic智能步进驱动芯片TMC5160(最高20A)参考原...
【MCU实战经验】+STM32F030的步进电机加减速
STM32F0的中文技术参考手册(标签处理过)
基于STM32F030硬件SPI经验分享