调试STM32F103 与 STM32F407两个板子互相通信都通过了,500k波特率都没什么问题,可以在STM32F107Vc上面就是不能正确设置波特率。 波特率配置代码如下: , r7 R$ E! a1 ~. q" l y. Y/ _# f6 f" Z' i+ ?; I% \" O 7 i0 Z ^0 ~: F+ R4 [' T0 B1 y) Q //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_7tq, 1, mode); // CAN普通模式初始化,普通模式,波特率500Kbps //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_3tq, 6, mode); // CAN普通模式初始化,普通模式,波特率500Kbps //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq, 8, mode); // 普通模式初始化,普通模式,波特率500Kbps //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_3tq, CAN_BS1_2tq, 12, mode);//500k! d6 J( G3 j4 g) d5 M CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_1tq, CAN_BS1_4tq, 24, mode); //36m 1000k 几个都试了,就是不行示波器测量有波形,但与407,103发同样数据,数据周期都不一样。 初始化函数:( D# E0 u% K9 ?1 A8 z7 _% ] u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode); u, z, j3 h1 X( n( q8 l! ^ { GPIO_InitTypeDef GPIO_InitStructure; 1 p; H% G+ O. p P4 c2 o# n CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; #if CAN1_RX0_INT_ENABLE ( W# D V/ M0 a% h, x NVIC_InitTypeDef NVIC_InitStructure;3 V; V6 ?9 w1 A0 q! j* I' g #endif7 Q3 F8 N; }8 ~& | //使能相关时钟5 D0 I( c& F9 b" a6 F RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PORTA时钟 / T+ F# H2 ]9 A( L RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟 9 O/ p4 @: m6 r/ ^ //初始化GPIO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;4 @( a; N% s7 r6 J1 C/ Z1 p GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB8 /* Configure CAN pin: TX */0 |& r: W/ o/ P% P/ K; [ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;) u0 e _2 o3 l& d; u$ @ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);6 w! \# D6 z/ D* M! z* a. b2 n3 G ( U9 Q' A* F$ x* x GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE );//重影射CAN IO脚到 PB8,PB9 ) F! s) {. g2 W2 q3 D //CAN单元设置6 g) y. F, [$ j8 D CAN_InitStructure.CAN_TTCM=DISABLE; //非时间触发通信模式 9 V |" |9 f8 o+ v! e H/ Z CAN_InitStructure.CAN_ABOM=DISABLE; //软件自动离线管理 CAN_InitStructure.CAN_AWUM=DISABLE; /眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)3 L, c+ y: J D; k/ S CAN_InitStructure.CAN_NART=ENABLE; //禁止报文自动传送 ) `- `# v7 t q* S2 i CAN_InitStructure.CAN_RFLM=DISABLE; //报文不锁定,新的覆盖旧的 & {" \4 Q6 y. g5 P- G4 u5 ] CAN_InitStructure.CAN_TXFP=DISABLE; //优先级由报文标识符决定 ' v5 |, ~' Y: S& J CAN_InitStructure.CAN_Mode= mode; //模式设置 2 W+ c. A4 n4 x% {. Q7 f' \( V CAN_InitStructure.CAN_SJW=tsjw; //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq# j" a* T1 ] O CAN_InitStructure.CAN_BS1=tbs1; //Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq. [. P0 X7 i4 V$ j; i% _5 Z" q& [ CAN_InitStructure.CAN_BS2=tbs2; //Tbs2范围CAN_BS2_1tq ~ CAN_BS2_8tq7 B, |2 N0 e1 C6 A5 o* P" t1 O CAN_InitStructure.CAN_Prescaler=brp; //分频系数(Fdiv)为brp+1 CAN_Init(CAN1, &CAN_InitStructure); // 初始化CAN1 ) q: T" z3 p l, I2 y7 U //配置过滤器. B; H3 e8 l0 l2 f4 ` CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器02 }8 g: |0 ]1 I( J! f z/ _ CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位 / ~. g; W3 q* O+ f4 j/ S CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; ////32位ID9 g8 S: J* W6 ~2 L0 |" D CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;" E y4 L1 K9 y0 \* _; W; O CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; //32位MASK, Y" g' m, w) x. Z0 O; Z& T% c: w* | CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;, d) E$ m- s* F1 } CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //过滤器0关联到FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0 CAN_FilterInit(&CAN_FilterInitStructure); //滤波器初始化1 W. N" U: v) r9 m; o$ \ ) T! `/ k2 }6 r* \6 J# x: } #if CAN1_RX0_INT_ENABLE CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许. ( Y$ B4 q- X! S: @- i4 Z NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主优先级为1, y/ D; P+ w' D" {+ ]( k* k U NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;1 q. ^6 Y' v! | NVIC_Init(&NVIC_InitStructure); #endif return 0; } # W9 {4 d; G# ]; b& Z, i* I# N & b2 y- ]. ^ ~1 d |
【管管推荐】STM32经验分享篇
STM32固件库分享,超全系列整理
小马哥STM32F103开源小四轴RoboFly全部资料大放送
【MCU实战经验】+STM32F107的USB使用
基于STM32F103两轮平衡小车设计(开源)
STM32F107VCT6官方原理图和PCB
【福利】用STM32库的朋友有福了:STM32F10x_StdPeriph_Lib_V3.5.0chm...
基于STM32F10xx存储器和系统架构经验分享
基于STM32F1的CAN通信之BH1750
基于STM32F1的CAN通信之OLED
STM32F103时APB CLK = 36M
对于STM32F107是多少
另一个107的板子电压差是1.0V,怎么会事?
keil自带的例程中系统时钟配置文件应该OK了,! W% K$ D# `! y9 s
注明STM32F103时APB CLK = 42M,怎么配置的没看明白,待有时间的了仔细再看看。
APB CLK = 42M
CAN1_Mode_Init(CAN_SJW_4tq, CAN_BS2_5tq, CAN_BS1_12tq, 4, mode);