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

STM32F091CBTx LQFP48 Pin CANBUS TX 問題

[复制链接]
hungchieh1029 发布时间:2019-2-21 19:44
你好,
9 \* r1 \* j. }5 i我有開個專案MCU選用的是STM32F091CBTx 包含CANBUS的應用,
4 r. C: B/ S$ ?& n直接下載到在NUCLEO64(STM32F091RC)的時候,CAN_TX (PA12)是可以發出CAN的訊息出來
5 Q3 c, b& P4 T1 u  r% w
" |3 C3 J% u& O3 k$ A3 Z# h可是當我把同一個專案直接下載到STM32F091CBTx應用板上的時候,CAN_TX (PA12)發出CAN的訊息卻是不正確的- K& V% O1 a3 Y# ~0 a# ?5 Y
請問一下,這是什麼原因8 _2 v2 D7 p* c7 n: P
: s; l0 I9 ~9 f% @5 b% y: B0 d
程式碼如下
, e7 i2 B2 E( P2 H8 Q( u- @0 w/* CAN init function */6 i$ K) p7 D6 J3 \0 r3 E5 `
void MX_CAN_Init(void)- `/ @3 z8 y- Y+ G" Y
{8 R0 U4 N! F, s, F( k. s9 r
  CAN_FilterConfTypeDef  sFilterConfig;# e5 |  T3 N) r# _7 F+ W- Q
  hcan.Instance = CAN;
+ |7 D4 O& o3 p  hcan.Init.Prescaler = 3;
& b! P  R3 L6 s& L4 ]  hcan.Init.Mode = CAN_MODE_NORMAL;. v. J% M* L% T9 c2 P9 P
  hcan.Init.SJW = CAN_SJW_1TQ;1 u% S7 j1 }& m3 V* F* \
  hcan.Init.BS1 = CAN_BS1_10TQ;- _+ s" D* G6 ?9 I4 M4 C# Z9 d; m+ J$ L, ]
  hcan.Init.BS2 = CAN_BS2_4TQ;
9 r# ]9 x; Q6 t0 O# X) T8 u  hcan.Init.TTCM = DISABLE;9 v% \7 t( {- I3 O2 i: C
  hcan.Init.ABOM = ENABLE;
& D) R  g) R: ]2 V! m  hcan.Init.AWUM = DISABLE;" d2 ]& n6 r: v4 j! K. |
  hcan.Init.NART = DISABLE;
% r' G) X) N' m* I( ?; ]; q  G  hcan.Init.RFLM = DISABLE;
6 A0 H' B& o5 J  hcan.Init.TXFP = DISABLE;1 d2 O7 D: ?4 z& _/ o1 F+ t
  if (HAL_CAN_Init(&hcan) != HAL_OK)
" w; E0 O5 \" w% J$ z  {% u0 L: ]% m( H) h3 ^6 I
    _Error_Handler(__FILE__, __LINE__);# K& k+ c, W" W* [" \
  }
, D9 k* ]9 t/ c/ |+ d0 M* W
" o+ g' X4 e# \# N        sFilterConfig.FilterNumber = 0;
% x( c1 b1 R$ L+ U        sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;9 T- v1 o" o- S, I- ~7 ?
        sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;9 a. ^6 r" C, |

, p* _. F  c2 z+ N* @        sFilterConfig.FilterIdHigh         = 0x0000;+ y" a: F& e& l7 I/ D" k
        sFilterConfig.FilterIdLow          = 0x0000;& Z8 @7 W5 c) m/ H: U* Z
        sFilterConfig.FilterMaskIdHigh     = 0x0000;- B3 v+ ?; M! ]9 r$ t5 W0 _5 q
        sFilterConfig.FilterMaskIdLow      = 0x0000;0 A* V9 w* Z) J3 S. M5 ~5 j: {
        sFilterConfig.FilterFIFOAssignment = 0;
' `6 S* U. f9 H! k- l0 O        sFilterConfig.FilterActivation = ENABLE;
& Q! O) m  U5 h: c# D6 i        sFilterConfig.BankNumber = 0;
, a* b. i) S  d8 f        HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
2 p4 P" M5 ^, m+ B* M% J8 r. ?5 }' ~7 N- t
}5 D9 }; x  K( S1 `* n) l4 F0 Y( S

$ F7 c5 w' F. A//==========================================
' Q; \' Y) x) L& S$ z6 E" u( _; [% A% S* ~1 G
void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
2 T  `9 h* d2 c{
7 J) S: e7 Q4 S9 v: W# ^' |' Z
4 q5 M0 B/ @0 N; P  GPIO_InitTypeDef GPIO_InitStruct;' B: ~" Q3 S, O, R
  if(canHandle->Instance==CAN). f9 a/ K1 n+ Z" ~  O
  {
: O) U' K1 _. b. W  /* USER CODE BEGIN CAN_MspInit 0 */
& m9 `4 N+ v9 t! z1 B* J
7 N3 w3 D1 l+ s, {' P5 T9 B) u3 J  /* USER CODE END CAN_MspInit 0 */
' J) b& I7 b! a    /* CAN clock enable */( A; R. n  n. r* ?  E" g& K
2 x% x1 h- G- W* w$ c2 J- f
) L% u7 L- \+ N
    /**CAN GPIO Configuration    4 m6 D7 m+ ?) A3 }* V$ z5 u9 R
    PA11     ------> CAN_RX
/ Z7 J( j6 h: v) [- [  X; g    PA12     ------> CAN_TX
3 U1 r7 }; G; n# p0 X    */
+ F# Z' l# B- T9 o; r# N; t: d# u    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
+ }0 S4 R& R6 h    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;, \  ^# W7 t, o$ A$ u
    GPIO_InitStruct.Pull = GPIO_PULLUP;
) S4 p' s2 g1 H4 F' y$ h    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
7 D' Q5 P8 @% o    GPIO_InitStruct.Alternate = GPIO_AF4_CAN;6 k" l, M$ L" I1 O- B2 p/ ?' i6 G3 s
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);& h. a$ |* I: @* @
    __HAL_RCC_CAN1_CLK_ENABLE();
; }6 |( {+ b, t$ v4 ^
9 K6 K/ q! O; \& V1 _+ J2 J" J$ H
, x& @3 ~) A, c2 A6 j& g$ r    /* CAN interrupt Init */9 c2 V, G- V" \! s% B
    HAL_NVIC_SetPriority(CEC_CAN_IRQn, 0, 0);
2 @# {' i5 V; C& U' Y7 Y0 c$ B; E% Z    HAL_NVIC_EnableIRQ(CEC_CAN_IRQn);* P  t8 e* J; R2 R
  /* USER CODE BEGIN CAN_MspInit 1 */4 W" ~- a7 j7 N$ L
5 U0 R) h8 n( |4 A* ]) j0 _
  /* USER CODE END CAN_MspInit 1 */
, ?/ S( V& n9 p' ^0 T  }
7 C# M0 R/ }, e/ A/ u  S5 F}0 i6 x0 f5 @' Z7 {6 z* K- [- T

. \' a+ X/ W2 E/ v, ]1 kvoid HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
! \. B5 [( A: \- ]{3 H- m1 o6 l, `8 }  B
! A- ^. P5 o9 Y8 Q# Q
  if(canHandle->Instance==CAN)
  x" S- P6 q0 r" ?. f) P  {
, V2 u$ i! p+ I0 r( \  /* USER CODE BEGIN CAN_MspDeInit 0 */6 B- ]/ v- c) x4 I7 w$ l; d

9 p3 L" L0 G. `" }* f4 l  _  /* USER CODE END CAN_MspDeInit 0 */2 v( n( P+ y. o) ^* D0 s+ K
    /* Peripheral clock disable */
, a3 g# `2 R( p6 t0 d    __HAL_RCC_CAN1_CLK_DISABLE();
0 D& r* q; I8 Z. O/ Y5 L4 v. I+ b" e$ ?( T
    /**CAN GPIO Configuration    & I3 V+ g. X1 F+ z
    PA11     ------> CAN_RX" E' Y6 Z' }- w( r/ S: K$ [
    PA12     ------> CAN_TX ! ?: M. T; F' v! ?! q8 y3 y
    */4 R( Z3 G" w) b( P
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
3 U2 T& w" S- r1 a, Q7 w2 k
: g- L1 b* M  S, r: r    /* CAN interrupt Deinit */# p# @4 m: o6 R
    HAL_NVIC_DisableIRQ(CEC_CAN_IRQn);
+ X- h& x* |: w9 P  /* USER CODE BEGIN CAN_MspDeInit 1 */
  }( M7 C0 d: _: z# `
+ j6 d8 J  i8 e' [  /* USER CODE END CAN_MspDeInit 1 */
+ W: j. _4 A+ o6 Y1 W  }( O  \2 x$ P  o: o/ W/ n! n' _2 n
} & {( j# W* ~+ I+ I2 B% d

/ G9 [3 Q( [3 r' e7 J; E- g9 @//===================================================
+ Y" z$ ]: U. n0 |int main(void)
& \, D+ t. A, {3 v2 M. D- ?{
3 I$ a2 }- ]. d6 [- i
) k2 ^- J# }6 N; p  /* USER CODE BEGIN 1 */6 J& M9 U' b4 k( k  K  L1 a  F: e8 t* {

2 u7 a& _8 D  p5 s$ E1 }# `: i& G  /* USER CODE END 1 */
6 H2 ~: @6 c3 T3 i$ ]5 K3 D8 g' z3 t! @
  /* MCU Configuration----------------------------------------------------------*/
# y. c) s; G- n- L
8 B( A" [- P  P6 c" [& Z  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */3 ]! i5 ?! r# M( g
  HAL_Init();
3 o  t5 i) L2 X& N0 t  w$ g% ^8 R' c3 O- F  c  Q
  SystemClock_Config();) T9 |3 p# r! K" f( y
+ _* C2 _' z; E% P7 O, }, z# R
  /* Initialize all configured peripherals */
& a5 k5 h/ ^7 k/ |5 f5 a  MX_GPIO_Init();
; w$ {, l5 `" [) D  MX_CAN_Init();
0 x, q7 ~$ g( J% T1 D& O
: Q$ ^% ]! |( g6 e. N4 [* V  /* USER CODE BEGIN 2 */' _! l$ M6 B' q* s
  CANTxMessage.DLC = 8;* r  X+ D, E  b* ?% s; L& W/ D* V
  CANTxMessage.IDE = CAN_ID_STD;  j, B  N$ H0 P0 ~
  CANTxMessage.StdId = 0x07;
& w% b4 Q: A1 z2 Q# D2 V  CANTxMessage.RTR = CAN_RTR_DATA;$ B. }( K% l$ {+ N! r  S% \
  CANTxMessage.Data[0] = 0;
- E; T. V% r5 L# |8 ?  CANTxMessage.Data[1] = 10;
: P* ^5 C2 r5 x9 r- J4 E" y# I  s  CANTxMessage.Data[2] = 20;5 D# n. H6 g+ f& h& t
  CANTxMessage.Data[3] = 30;
0 A( W: d6 G' w1 C2 H5 u. D0 [  CANTxMessage.Data[4] = 40;
$ X# R) K* ?: k& c) ^8 Y  CANTxMessage.Data[5] = 50;! [2 S& \3 S9 J- E6 ?
  CANTxMessage.Data[6] = 60;0 [+ {7 j" X: u9 r+ n$ K9 ^
  CANTxMessage.Data[7] = 70;: w! C# P, z/ u6 x0 T- {
  /* USER CODE END 2 */
; S/ |8 \* l2 L4 D6 f  hcan.pTxMsg = &CANTxMessage;
" E) F3 ]3 a/ o9 e
' v; T7 n1 O! g2 B  while (1)
* u! \9 a& p2 e# H( Y  {
# B, W  i5 B( ^. G/ J9 l! _  /* USER CODE END WHILE */
) q1 o6 I2 z: h! {3 W% [" g: Q          HAL_Delay(100);+ V; w# X& _% e  J2 ?0 Z
          HAL_CAN_Transmit(&hcan,100);
8 P% W. A) Q5 |- t/ g  /* USER CODE BEGIN 3 */
& @2 z( M9 o" N9 ]" `0 y( W! r# _6 p1 s
  }
, c' N, F8 F/ P+ }& [
  V+ |( f0 m! W}
" |" o5 j5 ]7 A7 K! z' x# E* K' {2 j3 c5 A; e8 N  Y; L
/** System Clock Configuration
' m: c- ^. S( ^: h! J& z*/2 y# _  D1 M+ ~! e
void SystemClock_Config(void)* e3 o* [0 z5 J2 w  |7 W6 ~
{, V) p1 U) w* }# H4 V3 y
1 x1 L) ]' V) L# L3 }$ s
  RCC_OscInitTypeDef RCC_OscInitStruct;
* J+ e9 F2 j" @! N  RCC_ClkInitTypeDef RCC_ClkInitStruct;
' @! r. b8 v$ v' `7 @. K' C9 ]
! G: i# o" k. X    /**Initializes the CPU, AHB and APB busses clocks % P% {; p+ I3 S" d* U% H
    */3 [  b( w7 i9 n% n" r7 N
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;- v1 C% c, y" _7 ~1 d2 ]: s! ]
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;  P* Z. W5 W. }1 l& B9 n
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
' R1 ~$ V2 e+ w( p' ]  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;# Q) O+ a- U/ p+ Q, d
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;4 x# j( {/ s; a  P
  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
4 O: W" U* [* F4 F1 u( `- E  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK); @5 m4 f) M' S: H5 _( x' ^
  {
3 Y8 o9 u6 {8 i! o4 p9 M+ d    _Error_Handler(__FILE__, __LINE__);, A7 ~% t5 {7 M+ B- P5 v
  }
% T; E+ \3 M2 k/ q% Y# ^$ r
0 p& D/ o' h$ y    /**Initializes the CPU, AHB and APB busses clocks
" ~9 u, q9 \; s- G4 k    */, W$ g: Z8 L" n! Y; I
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK% K  b  Z! J0 V( n4 O
                              |RCC_CLOCKTYPE_PCLK1;
9 U) e! r% f0 C  o  h  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;3 R- {) v. W7 e
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;$ x! `# l4 P/ z! C. S) @- x
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;' V: d% ~5 z6 ^
' F" [1 z; O; b9 Z& ^
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
% p& u# G7 ~/ i+ t( `) b5 }  {2 X5 Y# ]$ N3 I7 a: D1 M
    _Error_Handler(__FILE__, __LINE__);9 O! z. R; {, g9 l( S
  }
  M7 F+ b# H! e$ Y. U) e. v+ D: M; S0 s6 _" r9 {, c
    /**Configure the Systick interrupt time
/ ?/ |) i, D! a! W+ t7 V9 |, |    */
( `6 M& W" H2 j* i6 J3 M  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);- {! q7 r* r/ A6 H" s9 g# J' X
, o" S( n$ A, }* k
    /**Configure the Systick
/ Q  E9 K) E$ z/ f& ^5 e$ A    */
7 d, t1 [4 L/ O+ u1 a  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);7 [: L2 S' l# S7 S9 d6 }

3 y; u$ j9 z" R3 B& R  G  /* SysTick_IRQn interrupt configuration */
3 F/ C' I, l* w7 R$ O' u. F, S" @  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
2 T1 ]  V; M7 t4 b}" V; {$ ~7 Q" C" J

& u2 ^0 E" d5 \. M9 Q! w1 m
赞 收藏 评论0 发布时间:2019-2-21 19:44

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版