|
调试STM32F103 与 STM32F407两个板子互相通信都通过了,500k波特率都没什么问题,可以在STM32F107Vc上面就是不能正确设置波特率。 波特率配置代码如下:2 G9 R7 m0 Z7 ~" Y# M' q! E; W : X0 ^ w7 b6 W: Z) a+ O5 x //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+ \ w2 ^/ W3 M //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq, 8, mode); // 普通模式初始化,普通模式,波特率500Kbps M& B( R* f9 @) ]: q) W //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_3tq, CAN_BS1_2tq, 12, mode);//500k CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_1tq, CAN_BS1_4tq, 24, mode); //36m 1000k$ B$ t4 j1 S3 J! T% } 几个都试了,就是不行示波器测量有波形,但与407,103发同样数据,数据周期都不一样。 初始化函数:5 B" X6 O0 Q$ O& U; q' k u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) {( X A) _& N5 p- e' m% Q3 C& w % d9 A5 }2 X+ W: S0 g; @7 P9 X1 G. E GPIO_InitTypeDef GPIO_InitStructure; 3 C5 x4 G) Q+ z; ~: o CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; #if CAN1_RX0_INT_ENABLE & h; z1 G5 c; {9 r, J* K! o0 D NVIC_InitTypeDef NVIC_InitStructure;/ Q( p' O1 h- N# x1 d4 p+ C #endif //使能相关时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PORTA时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟 * j0 M0 W7 t2 ]4 _! W) e% x9 o) b ' m1 e1 w- P7 r- L //初始化GPIO8 { l, F1 b) H( K8 m$ r GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;. F, ~$ j. l# ?. n- f3 ]" K GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; : b/ N+ @( _- s GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB8 , y8 ?# x$ p: ^1 w" q O8 _ /* Configure CAN pin: TX */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);9 R' |3 F& U* p1 m ' N! G: ]% b b' U GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE );//重影射CAN IO脚到 PB8,PB9 , B5 |! e" l, d% Q! D3 ]2 W' ] h //CAN单元设置9 {, o7 M6 C& H' T, U6 W) h CAN_InitStructure.CAN_TTCM=DISABLE; //非时间触发通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; //软件自动离线管理 # B+ Q. ~- n5 X# ?8 f3 K8 s CAN_InitStructure.CAN_AWUM=DISABLE; / CAN_InitStructure.CAN_NART=ENABLE; //禁止报文自动传送 CAN_InitStructure.CAN_RFLM=DISABLE; //报文不锁定,新的覆盖旧的 ; S7 q/ d' B4 W; N$ h* x CAN_InitStructure.CAN_TXFP=DISABLE; //优先级由报文标识符决定 CAN_InitStructure.CAN_Mode= mode; //模式设置 CAN_InitStructure.CAN_SJW=tsjw; //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq CAN_InitStructure.CAN_BS1=tbs1; //Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq CAN_InitStructure.CAN_BS2=tbs2; //Tbs2范围CAN_BS2_1tq ~ CAN_BS2_8tq CAN_InitStructure.CAN_Prescaler=brp; //分频系数(Fdiv)为brp+1 CAN_Init(CAN1, &CAN_InitStructure); // 初始化CAN1 % Z: _7 E; {; Q m1 f //配置过滤器 CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器0' t) }' z2 C- x1 ?0 ]2 S2 d4 n CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位 CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; ////32位ID CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; //32位MASK CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;+ P U6 l/ V1 q: T% h CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //过滤器0关联到FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0. v3 b( i3 }) g9 Z8 t4 D" j, B _ CAN_FilterInit(&CAN_FilterInitStructure); //滤波器初始化! c3 W, Y1 {0 d* t % N6 K4 ~& Z/ H) n/ n6 I #if CAN1_RX0_INT_ENABLE " r4 ^$ h$ C" \2 H. T0 e) S CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许. ( \1 ]9 m4 q0 A% f& T 2 W3 v7 ] @0 }8 i: S( N% i& r NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;. _) y. \* f9 a A( [) J NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主优先级为15 _, B0 E+ }2 Q+ I5 U NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次优先级为0" c. t3 T$ j3 B. L5 K$ M2 ~3 S7 { NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;& @) g. s5 b( x) g2 t& t NVIC_Init(&NVIC_InitStructure); #endif return 0; } $ b, H) h/ `" j g, l# x! @7 @) m 0 g& d7 O9 b$ A" h( \* H' I |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版
STM32F103时APB CLK = 36M
对于STM32F107是多少
另一个107的板子电压差是1.0V,怎么会事?
keil自带的例程中系统时钟配置文件应该OK了,
注明STM32F103时APB CLK = 42M,怎么配置的没看明白,待有时间的了仔细再看看。! f$ y5 D4 f G9 w9 m
APB CLK = 42M
; Q5 r' E' T' v; z/ Y1 e
CAN1_Mode_Init(CAN_SJW_4tq, CAN_BS2_5tq, CAN_BS1_12tq, 4, mode);