|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用的STM32F072的芯片,在调试CAN程序的时候,用JLINK仿真出来的发送状态永远不是CANTXOK。
: g+ e! o9 R+ U: g$ t5 a) \$ V6 nCAN的寄存器显示为三个邮箱先后为Pending状态,之后就状态一直为无邮箱可用。芯片无法发出信号。求解啊,各位大神,难道是硬件的原因吗3 Q. u7 L2 B4 m) y5 `
int main(void)
% ]+ S! Y4 s! H; Z+ i- P6 L e{) i! R0 Q, w h6 A5 k! n3 E; N! F
- O9 y- Y8 u; ` S+ Y' F5 `' R
CanTxMsg TxMessage,TxMessage1;5 l# @1 \4 e. t" {
GPIO_InitTypeDef GPIO_InitStructure;/ B( W0 q: e5 u% Q
CAN_InitTypeDef CAN_InitStructure;
* f1 \" N1 T7 Y4 o' S CAN_FilterInitTypeDef CAN_FilterInitStructure;2 S) S. j' b$ ^3 Y$ N
NVIC_InitTypeDef NVIC_InitStructure;
8 G0 F7 c2 r: u3 E) Z //CAN¿úÏà1Øê±Öó
. O g, d2 h& c0 l* I" E RCC_AHBPeriphclockCmd(RCC_AHBPeriph_GPIOA,ENABLE); //ê1ÄüGPIOAê±Öó
. `1 Y) g: {; l$ a) y9 Q. D2 B4 U0 x
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE);//ê1ÄüCAN1ê±Öó
3 u: e |; T( i $ h6 @) W7 q, |7 S/ J# R! g- |7 W y4 m
//can1¿úòy½ÅÅäÖÃ
+ I6 @5 S( X' f GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;//3õê¼»ˉ! |/ D9 V, F3 S5 M
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸′óÃ1|Äü
9 X( ~% r6 N* @; I, d8 h1 ] GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Ëù¶è2 ^7 l4 u& H# @9 d( R7 M4 }
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //íÆíì¸′óÃêä3ö
' c# o* m) i( a; N7 C GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //éÏà-
( W# ?5 Z, _4 U/ B8 j% t5 c GPIO_Init(GPIOA,&GPIO_InitStructure);
* t: O* o; i+ C l, Y
& s M$ e; I% s6 k5 n! n# o) ? GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_0);
& N3 o* _- r' \+ r6 ? GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_0); & e4 Z6 s6 ]8 `
7 o7 }2 `& J7 ^1 j* u5 M5 b- z' W9 L //CAN1¿úμÄÏà1ØÅäÖà ( C6 z4 t: U8 w# P6 s4 b8 K
CAN_InitStructure.CAN_TTCM=DISABLE; 7 u$ w U; K! o7 p" M, F
CAN_InitStructure.CAN_ABOM=ENABLE;) L# V g3 K$ k; D& R+ W6 Y
CAN_InitStructure.CAN_AWUM=DISABLE;
0 |) ?7 h7 W4 E( G0 A: q CAN_InitStructure.CAN_NART=DISABLE;
9 c9 g' L% ~1 J: K1 U6 n4 X CAN_InitStructure.CAN_RFLM=DISABLE;4 V2 x# k% x% I( n
CAN_InitStructure.CAN_TXFP=ENABLE;
7 _1 t, ?, `- v CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;- q+ f' u6 q9 F0 R; i1 H3 A
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; 1 D5 x; i0 ^7 D, V
CAN_InitStructure.CAN_BS1=CAN_BS1_10tq;
" c+ H$ z. d0 ], ^' X: ^6 X CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;7 B; C3 J' d+ F9 c' b" S: M
CAN_InitStructure.CAN_Prescaler=4;- k6 Y2 [% }) d1 j' j
% i( p$ q) I& K9 @$ N4 B// CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack; // »Ø»·2aêÔÄ£ê½
3 s7 s8 S" p- y( {" O
& h+ o2 J/ Y% Z5 o% ~ CAN_Init(CAN,&CAN_InitStructure);$ }) k8 \5 Y! O1 R7 ?2 G x5 Y
/* CAN filter init */
{' X C( F" W& W CAN_FilterInitStructure.CAN_FilterNumber=0;
* S; M2 Y. [# V: ]4 Z0 h CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 7 T% k9 w: f3 ?$ [) L
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
% _+ C9 L* T' c6 c" v8 o CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;- x# [; `1 R |, z E) \/ |! z
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
& L! a" M3 N7 N& I3 }9 z% D CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
: _9 b7 p5 {9 y$ U CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
0 K: d" Y# M( H0 L* K- ^! @7 N CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;1 R% _5 b2 j$ }. X: m& Q
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;' x% [, b4 M- x* y$ X' A* v! ?- B1 }
CAN_FilterInit(&CAN_FilterInitStructure);
9 z- Z% z" I/ l2 M2 k' ^, j4 j
/ U; t! A% _/ R b6 x) C( o TxMessage.StdId = 0x12;
- `& ]' d; I# _0 ^7 i7 U' a TxMessage.ExtId = 0x12;- Q) l1 n, p2 K: n1 V
TxMessage.RTR = CAN_RTR_Data; //0x00000000;
/ m& s6 {4 B6 l8 N+ r5 O7 O TxMessage.IDE = CAN_ID_STD; //0x00000000;# r& E2 h; x3 a% }1 `
TxMessage.DLC = 8;
& s$ [4 @4 H- j- } TxMessage.Data[0] = 0x01;9 m% |: ~# T, a k; U
TxMessage.Data[1] = 0x00;
! f% U) @! n5 `3 O3 {7 \ TxMessage.Data[2] = 0x00;
8 s1 L$ H+ W1 P, b" [7 }/ ] TxMessage.Data[3] = 0x00;
* P5 I$ U# f7 ^3 ?% E8 { TxMessage.Data[4] = 0x00;/ H) a6 e% ^5 b1 y! \
TxMessage.Data[5] = 0x00;
, F8 u9 {8 d! H% Q TxMessage.Data[6] = 0x00;
5 b$ k+ H4 E9 N! y8 u4 O' _8 Q' |* u TxMessage.Data[7] = 0x00;
! o1 L, U; ~, V( C while (1)# `+ G8 o% k5 n4 B$ g2 S- F) Q
{6 Y1 D p- o l1 ]5 k3 i
GPIO_WriteBit(GPIOB,GPIO_Pin_9,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_9)));" q, O: a. P6 v7 g( H2 p
ii = 0x3fffff;1 Q" n7 }5 s M- Y1 t) Y8 i. z! I
CAN_Transmit(CAN, &TxMessage);
, C6 B0 B2 |- R6 S while(ii--);
0 Y8 _- x8 d- @/ T$ ]1 P% { w
6 O) M, B9 Q# M) Z }
4 T" }* _0 |3 b2 n8 n+ P' I' {}" ~3 E2 c! n. |6 z8 C4 a
|
|