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

STM32F091CBTx LQFP48 Pin CANBUS TX 問題

[复制链接]
hungchieh1029 发布时间:2019-2-21 19:44
你好,
7 [8 x6 C$ s- }; m( h0 M我有開個專案MCU選用的是STM32F091CBTx 包含CANBUS的應用,# O9 i% b8 @; o% b  b
直接下載到在NUCLEO64(STM32F091RC)的時候,CAN_TX (PA12)是可以發出CAN的訊息出來
2 j6 k- x8 \+ I3 I0 m7 p. X! y( Y
, t. V3 m1 x3 ~. n6 c3 ~* ^3 }可是當我把同一個專案直接下載到STM32F091CBTx應用板上的時候,CAN_TX (PA12)發出CAN的訊息卻是不正確的
/ z) `3 d# l6 {0 v4 [0 H( t請問一下,這是什麼原因. d. u- _) C7 _  |' {" P
5 j2 d# u! J5 W( @: c
程式碼如下
! @& h, {6 d( L9 X5 t, b/* CAN init function */
: e% P' B# L. S$ L: D! Yvoid MX_CAN_Init(void)0 e" d5 q' Y, A
{
5 W! E' Z* N. b* `  CAN_FilterConfTypeDef  sFilterConfig;& |( Q" r, p$ j. D6 i0 K% b5 M
  hcan.Instance = CAN;
9 x6 n2 Q( `  U" y% {  hcan.Init.Prescaler = 3;5 _; Z4 [4 X+ w% H2 `
  hcan.Init.Mode = CAN_MODE_NORMAL;
5 a  ~# z) H  V% x6 H% U  hcan.Init.SJW = CAN_SJW_1TQ;
) `3 o. X  z4 i* U: u  hcan.Init.BS1 = CAN_BS1_10TQ;
3 G# D/ w& _8 H# M0 f  hcan.Init.BS2 = CAN_BS2_4TQ;
: Z( T, Y# @/ Z/ b5 D  hcan.Init.TTCM = DISABLE;: i2 q4 t8 n7 q$ ~& n! S
  hcan.Init.ABOM = ENABLE;
. L# g- n% ^& U. ]7 ~  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;
/ h4 ]) t, H3 |% v  hcan.Init.TXFP = DISABLE;5 w6 q* `1 N: D% O8 ~
  if (HAL_CAN_Init(&hcan) != HAL_OK)
, G6 w3 Y7 a' ^) H, g/ e  {0 M6 N7 r  C% g& T9 c
    _Error_Handler(__FILE__, __LINE__);
! X3 a/ e2 M: [9 T. Y) Q  g! }  }* W9 n/ M: E! R  w+ S! k  B# Y
+ w) F$ Y- ]! p* r( V, J0 L! J
        sFilterConfig.FilterNumber = 0;
# F5 C9 E. ]. _3 D0 h" p0 s/ g        sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
- V) w- s5 f0 d  f1 W3 Y5 y        sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
7 y4 r" J/ w3 V# a8 T9 v" X
# V$ j0 @3 n; G( c9 o        sFilterConfig.FilterIdHigh         = 0x0000;
1 c3 j2 x5 X1 Y4 W6 E+ m6 w* e7 z        sFilterConfig.FilterIdLow          = 0x0000;' F3 s1 c, l; j+ X
        sFilterConfig.FilterMaskIdHigh     = 0x0000;
! a8 G% a7 N: {( ^. L) `' O  |9 T        sFilterConfig.FilterMaskIdLow      = 0x0000;
- T7 z. M7 z0 W# o' M/ F2 p7 p        sFilterConfig.FilterFIFOAssignment = 0;$ o# W7 P# `4 u( g  H2 ~+ \: ~+ i
        sFilterConfig.FilterActivation = ENABLE;
: T" k9 `/ a0 l. R        sFilterConfig.BankNumber = 0;
/ w/ H( Q4 Y3 R6 @6 R        HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);" j7 z$ [$ Z% W. ]+ d5 G

* z4 U0 c7 u* z. j/ M* E}4 E: |) m+ |3 K3 _2 Y

% s8 b  [/ X2 D$ S: Z. m! [( x//==========================================
4 H& M( v) a; B8 j# ^3 ]
. J0 F# R5 H0 l, X: B4 c5 t  _/ g: pvoid HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
" ^/ Y: b3 Q; V( f" f{
. C2 M1 v* u  X, ?/ T. P$ u: n4 v- {; E; r  ?2 R& |
  GPIO_InitTypeDef GPIO_InitStruct;
! i" [" x% Q8 Z+ i8 n; B, F; U/ V  if(canHandle->Instance==CAN)2 S9 N8 c% d6 j/ n
  {
6 p  w" l4 Q+ E' F8 H' I  /* USER CODE BEGIN CAN_MspInit 0 */0 }0 ]  U6 L6 l, A0 g
; {7 K9 R5 z3 X
  /* USER CODE END CAN_MspInit 0 */
; ]4 }; s  ^  @$ v- o- T    /* CAN clock enable */3 U+ {" w$ Q) M2 R

+ A' {: c) j2 ?) M; Z$ ]) F
- V- ^2 ~6 G9 \. S! p- O7 [    /**CAN GPIO Configuration    4 I0 a8 L$ |" q  h: k5 Z" X# T
    PA11     ------> CAN_RX
) b  ]- P9 N( X' ^+ q    PA12     ------> CAN_TX
3 h; m" M/ s; Y1 f" \' H3 W) E    */
3 T. v1 k% K$ `) _3 @    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);
3 h, ?1 D8 l6 s% T  @  X7 Y. G    __HAL_RCC_CAN1_CLK_ENABLE();( Q# D/ p1 |& X% N  g

7 V1 m. i5 t8 A5 O! d
' ~. J" y# K7 \. V* s    /* CAN interrupt Init */
. }6 G: @+ H" t% F! L    HAL_NVIC_SetPriority(CEC_CAN_IRQn, 0, 0);
' u& h2 Q1 F# \9 o" {2 w    HAL_NVIC_EnableIRQ(CEC_CAN_IRQn);
, |/ m2 H0 [0 g  /* USER CODE BEGIN CAN_MspInit 1 */
0 f2 A; r( T3 b  P7 U* t! c2 H) F- V  B
2 K$ i' d; }  |4 E  }' [8 r, h  /* 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)
6 j( t9 ~! p" b; o/ X5 n, ~; g+ Z7 ?{
( S2 r) `4 Z- I* s; X) A" |, {: k% o
' c6 E6 Z6 Z6 t, _# }1 y+ T3 [  if(canHandle->Instance==CAN)/ I9 I# C2 ~3 R7 M
  {
) a4 p/ n# B; T) G  /* USER CODE BEGIN CAN_MspDeInit 0 */
8 C. Y3 Q! Q1 t* _# r
8 a3 D# z9 p+ D5 k! [% L5 z  /* USER CODE END CAN_MspDeInit 0 */
3 F) l# D6 A' y( b6 A% Z- b    /* Peripheral clock disable */
1 X: E, E" ?! O5 W5 t5 J    __HAL_RCC_CAN1_CLK_DISABLE();
  U7 I% G+ Y( X# d1 \
8 ?' ?0 @% M  a# z" J. |3 Q    /**CAN GPIO Configuration    - r) x4 z; u6 z; N
    PA11     ------> CAN_RX
0 b0 J. w6 t( E  L  Q    PA12     ------> CAN_TX
; R+ a3 m" P) i4 N/ J+ k! w% H    */
  n. d& s0 J+ A( H8 D% n& o1 {& j    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
4 a* h4 Q) o3 s' L. C4 X8 @! {; Q9 r# Y$ w5 u3 E  `% c
    /* CAN interrupt Deinit */& E, H8 n- c/ I  w' T
    HAL_NVIC_DisableIRQ(CEC_CAN_IRQn);
6 a8 ~' A2 z7 L6 B# Z, v" l9 c  /* USER CODE BEGIN CAN_MspDeInit 1 */
2 G" H/ Y$ i. A, z" A: S* Q/ {; W* t4 \$ [+ j5 \
  /* USER CODE END CAN_MspDeInit 1 */
, R) `4 d: ~5 ?* x# [( o$ |  }2 @0 `7 U  [! X/ X4 ?
}
+ ]' `, _& [5 J; \& O+ z# v# A3 ]* [
0 E& [. y& A( N/ P% Y# D! l2 Y. _//===================================================1 Z8 k8 k8 C+ K$ O' H
int main(void)
& P/ Z- z/ g2 [( M{
/ r, c. x# R1 V( ]7 D4 {$ A- `, a; u# {. D/ D4 G# K9 _& m" C
  /* USER CODE BEGIN 1 */
5 U, H3 j0 ^3 S" x* D) K
/ d3 e# m+ U+ K; O* V2 v9 d  /* USER CODE END 1 */
& T" K& F/ _7 M$ k) t' a
  s! B. d# x/ g$ X# w3 r% O- j  /* 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. */
* K  X( K, v8 X2 c# K) n3 k, p  HAL_Init();
. z7 z+ N2 c3 k% r) ]& b
' O: _5 W  e, Q/ \% V( t8 Z9 h* r  SystemClock_Config();
4 p- v' f- m9 U# x  ?' a
6 j# g3 Q1 b: o. K" x1 x1 ]& l  /* 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();
$ E; l; ?0 ~: \: P0 f1 T  s
8 C9 O* Y& V7 I& t* g3 O- Y! ?" o  /* USER CODE BEGIN 2 */
1 Q6 b. Q( A, Y5 T  CANTxMessage.DLC = 8;
% ^: E. a5 g3 y9 d$ p  CANTxMessage.IDE = CAN_ID_STD;
' ~5 P0 _8 |' w6 P  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;
' Z2 m' h! N$ V. U" ?* f% w$ X4 o6 O  CANTxMessage.Data[3] = 30;
& i+ g# x3 C* N4 ]) ]: _9 @  CANTxMessage.Data[4] = 40;
( F" P# N1 {% c, D  CANTxMessage.Data[5] = 50;! S' d4 Z; Z5 ?$ i
  CANTxMessage.Data[6] = 60;
7 e% L1 H( U7 B* H  G  CANTxMessage.Data[7] = 70;
" C4 z4 R8 {5 Z. w: t; {& O  /* USER CODE END 2 */7 d, O# S8 v- x' A' ^
  hcan.pTxMsg = &CANTxMessage;8 j6 \3 _9 Y. ]1 `" F

3 g+ z( l7 S, N  m  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);
$ T, g" e. J# T& {" M" }0 Q* b  /* USER CODE BEGIN 3 */& [4 t/ J' C9 g6 _

3 @" o" s8 _9 T1 t( }6 L; l$ H1 ~3 u  }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
*/
$ o' w9 ~/ |) K8 H' S  R& f7 wvoid SystemClock_Config(void)7 x" b0 f1 m% D) o5 Y+ v
{; H1 D# z* O$ y! r! T

7 K$ j: @, r5 ]: `( s  RCC_OscInitTypeDef RCC_OscInitStruct;
) \* R& V6 M2 g$ Z$ H- J, j  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
    */
% U4 ?( ]. v7 K% L$ B' f  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;
7 v( ]7 Y- u( X5 `! Q" e- C  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
# V' A0 `) r4 _! \; w4 r/ o  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;$ c3 s5 U9 B# T
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
4 o+ ]: o/ Z! R# P* e8 T  {
; `3 y1 @$ y' r& a8 v  v7 M    _Error_Handler(__FILE__, __LINE__);
9 ^. B/ b5 F& O/ q1 f  }
" e, ~4 F# {2 t6 G3 P4 {, 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
* E* V0 E0 b; w                              |RCC_CLOCKTYPE_PCLK1;! G% b$ z5 c3 n; K- C
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
, z* y2 x3 I& q  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
4 G/ I- V6 ?' F- s% }  @; _9 o" c6 N- W  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
' S! Y- Z5 v" o3 H! P5 E# A9 p* 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
  {
- C, b0 j8 O. C0 I: Y$ j' {    _Error_Handler(__FILE__, __LINE__);8 ^6 I) i; l7 s! B3 |; j. d/ Z
  }' q3 |) F$ x9 A3 g

4 E8 ~! D! I$ y: b9 p. o7 v    /**Configure the Systick interrupt time 3 a8 _1 ?1 D/ Y: W$ X" _
    */
4 I1 O5 X4 m# H8 y& R" P; Q  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
' m1 r7 @0 V9 [- h6 `% R0 A9 W. u/ A0 {7 F
    /**Configure the Systick
$ z' c1 _  D' N; F4 w5 I    */
5 T- m; O% G9 ]9 G9 a  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);8 [1 Q3 y6 W1 e# I: J. S  p

7 X+ O& T: V- q* F* H  /* SysTick_IRQn interrupt configuration */& r9 x* U; M: \1 e
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);5 V6 ?$ a- H) Y
}
. D+ }8 h2 ^. m+ D/ m8 P& ^7 ^
5 W. o, `7 |* h/ U
收藏 评论0 发布时间:2019-2-21 19:44

举报

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