你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F091CBTx LQFP48 Pin CANBUS TX 問題

[复制链接]
hungchieh1029 发布时间:2019-2-21 19:44
你好,$ R% D3 Z! S, k. R% H' A* V, o
我有開個專案MCU選用的是STM32F091CBTx 包含CANBUS的應用,
4 T: y% }" M5 k: I- Y7 k直接下載到在NUCLEO64(STM32F091RC)的時候,CAN_TX (PA12)是可以發出CAN的訊息出來
' w4 M2 v0 ^, e/ y+ Z- B, x( 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

6 M0 V! N) a" d' {# b程式碼如下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;
  q1 U# Q  q" I- O& n: C  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;
, v; i. V; s& I' u. c  hcan.Init.SJW = CAN_SJW_1TQ;
$ Z, Y& E, g8 r: e  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;
6 f: G/ ?: x6 G& W6 G! G  hcan.Init.ABOM = ENABLE;
" r3 |' k- J) h6 R, V  hcan.Init.AWUM = DISABLE;
- V5 x- y: h: u# H. p2 n' P  hcan.Init.NART = DISABLE;
  b8 `' s; O. [' ?* J6 V  hcan.Init.RFLM = DISABLE;' T8 n! A  ~7 F" F. m2 G
  hcan.Init.TXFP = DISABLE;
2 z" q3 Z- m0 Q  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

" o" R  N8 w2 E3 Z' z! C1 e! ^        sFilterConfig.FilterNumber = 0;
5 U0 z( e* N  p: i( `( M        sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
$ X8 I; `/ ?3 ~        sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;4 F; F' t5 W/ A2 S& D! x; N8 E

8 U7 w9 ~4 T( D' J% Y        sFilterConfig.FilterIdHigh         = 0x0000;& B7 x: ]  I/ q2 R( U3 B$ P& I
        sFilterConfig.FilterIdLow          = 0x0000;
: s) l/ `2 w2 z% F        sFilterConfig.FilterMaskIdHigh     = 0x0000;
; s( D' `* ^6 q1 b" b8 g0 B* I" S6 }        sFilterConfig.FilterMaskIdLow      = 0x0000;
" T" @% @* D$ U/ k4 k; I        sFilterConfig.FilterFIFOAssignment = 0;
/ i; I) p2 i; E        sFilterConfig.FilterActivation = ENABLE;
0 v& n8 c/ L+ k        sFilterConfig.BankNumber = 0;
* _% k$ P1 l; {' E1 `        HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
, O' O8 \5 l- `: A
  w8 I8 U' T" h3 c" {0 X}
( f6 ]& q. {7 X0 S, \2 f! R9 V, N# G/ d% c) T3 }8 S0 {8 ?* E1 D
//==========================================
& ~2 V; G: t5 j0 R; u4 W+ Z& W4 }+ U! i: P+ }. e8 k9 Y3 h
void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
: C: k& D' V( y{$ B% a) W3 G3 \

) }+ P9 Y" S9 j  k3 q  GPIO_InitTypeDef GPIO_InitStruct;
* s: j# a5 r' Y' [& w0 b9 t' V  if(canHandle->Instance==CAN)
/ q3 q! b' c+ n& w1 R- M, k$ p  {
+ b" \4 @% r6 Y1 _" M& Q1 Z  /* USER CODE BEGIN CAN_MspInit 0 */& W% i  l3 B, \8 y7 c' w

0 x, D1 N2 X% K: [5 N7 Y  /* USER CODE END CAN_MspInit 0 */
, [" `) h& J. Y) z" J4 f) i    /* 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
  X  R0 u) R+ @9 j. b    PA12     ------> CAN_TX
( T) S! K8 M. _1 H    */: }, 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;
7 T3 G* ^( E2 Z- D3 B( m: {( M    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);
. i/ s9 ^9 k0 r7 l3 o: ]) o" p# K( H  W    __HAL_RCC_CAN1_CLK_ENABLE();, j0 f/ [$ O+ C8 x9 I

( ?7 }* ~+ C  V# I3 ?
3 T7 _$ M+ T" f. |2 r; L    /* CAN interrupt Init */
/ l: q, m3 Y/ [1 y& e. \" c$ s    HAL_NVIC_SetPriority(CEC_CAN_IRQn, 0, 0);
6 W3 F3 T& P9 e. U/ `7 |    HAL_NVIC_EnableIRQ(CEC_CAN_IRQn);: Z# g# G3 j5 S4 z% X, F. l
  /* USER CODE BEGIN CAN_MspInit 1 */
8 Z$ N; \, p8 @4 b6 K9 i1 T  p2 S" h8 X
  /* USER CODE END CAN_MspInit 1 */" u9 p! M/ M1 X( a/ R- o
  }
" d+ _- e, z* Y7 F, e9 Z0 w4 w}
8 l9 {# V% B% H" @8 J; R6 @3 l7 J# L6 A, P0 \
void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
, H% ]/ O( x+ W% X% T+ j( U* d* J{; |% k7 [  j" P3 f# w* @0 ]* f8 l

- I: h2 z' }) B4 R8 \  if(canHandle->Instance==CAN)2 |: F  x' Q7 D8 @) }: i
  {3 n, v+ _# }  J
  /* USER CODE BEGIN CAN_MspDeInit 0 */
' U8 K6 v' M9 ^8 U: C6 |8 c0 {6 m7 O( h4 p9 v4 n2 T! l* v# y
  /* USER CODE END CAN_MspDeInit 0 */# h, q; o5 f, {! k& A
    /* Peripheral clock disable */
  u5 f! R2 C% t- V    __HAL_RCC_CAN1_CLK_DISABLE();
. A3 e0 ]9 q# Y$ s9 E
. X& ]1 v  w2 m0 N. H    /**CAN GPIO Configuration    * Y" l, |, ^* x+ Y' ~0 X, n
    PA11     ------> CAN_RX2 D5 z  V- @' a7 [, }, j+ Z/ D: l
    PA12     ------> CAN_TX
; t0 Z6 [" i7 W% E& z7 J    */# 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 */
7 ?& q( i$ U8 G2 _- \1 ^) p    HAL_NVIC_DisableIRQ(CEC_CAN_IRQn);
( `% m& h& N! r  /* 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 */
' L# v9 L" N% _# ^$ ]  }
: \6 v, R! q) s" \4 R4 Q} ( |' D8 O( Y2 y& C* h/ h

3 W2 X& O. w, x+ j0 P//===================================================. I4 z+ ]3 G  k
int main(void)
8 h& e; \% `) n% e+ d{5 R3 C9 P) y$ S7 C3 T) f: h

* j$ c; B7 {# n( C7 ?! x, I  /* USER CODE BEGIN 1 */
  D( s# q7 ]8 F' B$ _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

' _/ g8 L  V7 X/ Q7 B  /* 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

2 r) F: n+ V( {# H- ]* ]. G& s& B  /* Initialize all configured peripherals */
. P' C+ P6 H' T  MX_GPIO_Init();
% p- \7 @) ]3 r2 |$ x  MX_CAN_Init();- M: w1 X) e7 ^/ O

8 c. P/ X' ?+ r. ]; L3 z/ i  /* 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;
7 B* ~1 l) t- n) q  CANTxMessage.StdId = 0x07;
# `! c1 T, J$ E* `6 w  CANTxMessage.RTR = CAN_RTR_DATA;
4 f1 S# E- Y* T  CANTxMessage.Data[0] = 0;
6 Y( F& J8 P: K2 Z3 u. ]* J5 }! H  CANTxMessage.Data[1] = 10;0 V0 X' p; [0 B8 Z# b
  CANTxMessage.Data[2] = 20;
4 K$ s+ e7 X8 {0 F  X  CANTxMessage.Data[3] = 30;7 t& _4 B% S5 \4 h. P' S
  CANTxMessage.Data[4] = 40;
' {* L, U9 `6 H) D2 T  CANTxMessage.Data[5] = 50;9 B1 [6 z9 C) L" _$ ^4 b7 t  R: n" a
  CANTxMessage.Data[6] = 60;
; _" o: P5 |: |' k# w( a% P  CANTxMessage.Data[7] = 70;" `3 G8 C) K2 k+ v
  /* USER CODE END 2 */' N/ z8 K' R& _1 m; Z
  hcan.pTxMsg = &CANTxMessage;
1 e% w' |+ o! A7 X' D0 D  _6 P  y+ v/ s( F& Q8 S7 ]
  while (1)
% S$ y7 q' X: K8 `& \& H  {
( A4 c' z1 k! i- k+ n, L6 k6 T  /* USER CODE END WHILE */: [8 S* O/ e# p, G: i* u6 a
          HAL_Delay(100);
7 g$ g# M! X9 K! J: L          HAL_CAN_Transmit(&hcan,100);
( N+ K; W; V9 I2 L  /* USER CODE BEGIN 3 */% I1 C( O* S8 h; b* b' J8 u
2 N% V% U+ c! G
  }
/ w9 X; x1 g' G7 I$ e: ?$ r4 I) U4 ?% C/ q* {  r% O
}
2 D) D* F! E1 y, B- q2 y& T. M# f
/** System Clock Configuration
. s9 q; C* W5 B9 V6 @* L*/0 u5 _8 c& P8 M7 c8 ^, s
void SystemClock_Config(void)! [5 h# [. v& |! n
{
  s0 Z! v+ ?7 R  D$ K! E3 f% ^  M( c( E: |/ ^
  RCC_OscInitTypeDef RCC_OscInitStruct;
( q0 z( U& f3 B# t5 M+ ]! P  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;
  C% G' ]# t% W; ]" j: Y  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
) ]- s# P4 T8 [  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;; g5 a8 W+ j( y
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
# n0 w' \% O. u" e% R! u  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;1 s5 c: R# ~5 `& N! ~
  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
2 m" B' X9 ]/ E' }6 C7 o  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
* d* p' _; g. C* ~8 o+ B6 d2 {4 D  {
* B7 G+ _' m( x# k& m/ r1 L5 `    _Error_Handler(__FILE__, __LINE__);
1 Z2 K4 |2 \9 @' T* q- b  }; 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;
9 N' l1 T: \9 H- b' w  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;# A6 ], u' B6 h8 Z: X
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
8 j5 `0 \# c8 k5 Z  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;, B" |% i# `; r  d2 S2 S

$ ^$ M7 T) p) k/ v! Z3 f% i9 e* p  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
1 Z3 Q& D' g7 R5 R8 i' d$ B/ M  {  b4 m5 j# a1 F! E2 X( B
    _Error_Handler(__FILE__, __LINE__);
# ^- C% _! J9 \2 s" z7 P; s7 E  }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

1 |9 W! V- Z1 _1 `2 p    /**Configure the Systick
. J  K! H  X: S9 t9 f" W% G    */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 */
2 U9 j* |4 v4 O2 b3 o: p" e  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);2 }0 g0 Z, V; _8 b
}5 v% W8 }; o. {

& I  \5 M1 H( y9 v2 V6 s
收藏 评论0 发布时间:2019-2-21 19:44

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版