|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用的STM32F072的芯片,在调试CAN程序的时候,用JLINK仿真出来的发送状态永远不是CANTXOK。
/ y4 K* U" \0 ?; G, mCAN的寄存器显示为三个邮箱先后为Pending状态,之后就状态一直为无邮箱可用。芯片无法发出信号。求解啊,各位大神,难道是硬件的原因吗
9 w. K5 ]1 P+ A' s8 z2 ]int main(void)
8 ~0 c( k l+ l/ a; F{/ N8 D- m; d n m9 j% X
" }# q' K" L# f! W CanTxMsg TxMessage,TxMessage1;
, _! G/ `1 h9 N, Z. j GPIO_InitTypeDef GPIO_InitStructure;# K( X7 U5 `. n. c/ W
CAN_InitTypeDef CAN_InitStructure;4 {- c- X* h( {3 {2 j/ a( ^( f
CAN_FilterInitTypeDef CAN_FilterInitStructure;
- t9 n6 z# ]# N% c3 z NVIC_InitTypeDef NVIC_InitStructure;
# Q$ [5 |6 V7 C: k //CAN¿úÏà1Øê±Öó+ q3 m0 ?* H/ S( Z* B4 y3 T1 p
RCC_AHBPeriphclockCmd(RCC_AHBPeriph_GPIOA,ENABLE); //ê1ÄüGPIOAê±Öó
2 C. c) G1 X# G. u. a \( a( h& W7 s+ k
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE);//ê1ÄüCAN1ê±Öó
5 Y# O! @ L' M, _( H# r4 i0 m$ H2 a ! X$ u" P1 f- \+ u- U
//can1¿úòy½ÅÅäÖÃ
4 Q/ \$ ]) m2 R/ E1 E0 n GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;//3õê¼»ˉ
1 [. D' _# w" l4 h" ]+ }8 Y% B GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸′óÃ1|Äü9 u! r; V1 ?, |" ?% W
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Ëù¶è; s4 k5 p% n& ` K' N$ q
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //íÆíì¸′óÃêä3ö
2 e, a7 R, D- W1 c# ^ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //éÏà-
, I! ~8 Z; m- C$ a1 w GPIO_Init(GPIOA,&GPIO_InitStructure);* ~+ A" q! o% I7 @' b* U; {% s6 a
5 S' ^' S8 R, o* ~9 w+ z GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_0);
6 B- s0 C& [3 R/ p8 x* p6 e GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_0); , ^4 X2 I; {, G
7 \$ m# B$ [) U) u6 Q' y) f
//CAN1¿úμÄÏà1ØÅäÖÃ
! S3 J- u; b( } CAN_InitStructure.CAN_TTCM=DISABLE;
- H+ p5 L: C* [4 k% h CAN_InitStructure.CAN_ABOM=ENABLE;4 D+ k' {& w/ o7 s* N4 ?
CAN_InitStructure.CAN_AWUM=DISABLE;
+ r4 y2 F/ i( Q2 N/ q; p CAN_InitStructure.CAN_NART=DISABLE;
8 L9 a2 H% e; u/ \* y CAN_InitStructure.CAN_RFLM=DISABLE;6 U% d, L4 w2 v) U, b' Z9 @2 T
CAN_InitStructure.CAN_TXFP=ENABLE; : X, H6 Q7 W( K. Z3 ^
CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;3 X1 R' R1 l7 J7 h
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
4 C% u# ^& w# Y! t* q) i! l CAN_InitStructure.CAN_BS1=CAN_BS1_10tq;7 K9 l O' G7 Z+ v0 @
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;8 _ E9 U+ _0 _" Q
CAN_InitStructure.CAN_Prescaler=4;
: [. b9 V" U8 [& d / L* d, [2 t- W( g, P
// CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack; // »Ø»·2aêÔÄ£ê½
7 q0 N2 ?9 g/ h
& [5 |) l$ h5 h6 T CAN_Init(CAN,&CAN_InitStructure);% e7 W7 o- G, a, g2 q) d
/* CAN filter init */# ^ n r2 i) J) c. E" M
CAN_FilterInitStructure.CAN_FilterNumber=0; / ^* Y0 p; B2 S% v
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; % _+ o1 z; n; e$ r% {
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
1 F; J5 W2 @% t% v CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;/ _& Q: L2 C: ?7 f+ r9 W
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
% g+ A9 P; m2 N7 P CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
8 a& t# M5 f/ N: U. ~2 K CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;, a9 j1 U4 E9 r3 T: R4 U. D" ], \
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;
5 T( l9 e Q0 D- j+ a CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
" G; Y1 D5 b( U0 U F! t+ e CAN_FilterInit(&CAN_FilterInitStructure);
+ M$ q+ R& f6 b& \5 ~
; N- e# p$ l7 [% C0 V' g+ s2 h TxMessage.StdId = 0x12;
; E3 o4 v9 {3 }: e2 [ TxMessage.ExtId = 0x12;) t+ \( o4 Y, }) w) G* J! c3 C
TxMessage.RTR = CAN_RTR_Data; //0x00000000;. a; z2 U/ W" c% s6 u0 z' k6 K
TxMessage.IDE = CAN_ID_STD; //0x00000000;& h8 ?) R2 r, \9 l3 B) O; O
TxMessage.DLC = 8;
) W& m4 V1 L5 M# @& G, `5 t% R TxMessage.Data[0] = 0x01;
( f+ {6 f s. U7 v5 x TxMessage.Data[1] = 0x00;+ s8 d, C0 q/ T
TxMessage.Data[2] = 0x00;9 f: ]% @/ m1 G. N
TxMessage.Data[3] = 0x00;
" G4 ]/ T& X0 F* K$ @2 _ TxMessage.Data[4] = 0x00;
& M$ Y: X: o& Z6 Y TxMessage.Data[5] = 0x00;/ x- @* Z$ K' a8 ?
TxMessage.Data[6] = 0x00;
( e* d. U- t+ b. N6 R+ V# p TxMessage.Data[7] = 0x00;4 ] a$ |( D! B' P% l
while (1)
( v; |3 M1 [( b+ N1 X) I/ ?& K3 { {
, m- T; j4 M, w4 M' z6 s GPIO_WriteBit(GPIOB,GPIO_Pin_9,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_9)));
; l) c0 b1 T& \8 x ii = 0x3fffff;
- F8 s8 j" v. P1 p CAN_Transmit(CAN, &TxMessage);) v/ }9 C; O4 b+ }& H
while(ii--);' [" M$ ?" e; X5 q' n+ @' u
/ [$ b }9 X" H+ x2 ?
}
/ l' i2 k, U5 _& Y8 P4 s}2 f# c- E1 v* m
|
|