|
调试STM32F103 与 STM32F407两个板子互相通信都通过了,500k波特率都没什么问题,可以在STM32F107Vc上面就是不能正确设置波特率。7 F' p6 i* Y5 d; k. R: K+ L ` 波特率配置代码如下: : R( q; I' t/ [! K) D8 J //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_7tq, 1, mode); // CAN普通模式初始化,普通模式,波特率500Kbps+ D. e7 ]7 Y1 [: H //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' I; A, y2 B, j0 Q1 E //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_3tq, CAN_BS1_2tq, 12, mode);//500k0 R; [ L# \. J5 i h0 q; s1 S CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_1tq, CAN_BS1_4tq, 24, mode); //36m 1000k 几个都试了,就是不行示波器测量有波形,但与407,103发同样数据,数据周期都不一样。4 Z. i; W1 j$ g( [& ]: l& C 2 N; e. _# G1 j6 \1 i7 e; D 初始化函数:5 Q8 s% M5 \, b8 ?8 V& o8 L' [! p u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)9 Y6 F% D# R' M1 W8 i* U { ) A! L2 p$ H6 y b0 G% J7 c GPIO_InitTypeDef GPIO_InitStructure; 4 b0 o' H" N* k# K6 t3 m' O& ` CAN_InitTypeDef CAN_InitStructure;& |$ g1 r- W$ `4 a3 _" v CAN_FilterInitTypeDef CAN_FilterInitStructure;! p# |% ^( t3 N3 Q5 D #if CAN1_RX0_INT_ENABLE NVIC_InitTypeDef NVIC_InitStructure; #endif //使能相关时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PORTA时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟 //初始化GPIO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB8 0 x0 X7 g3 G& T: o /* Configure CAN pin: TX */! c# s* f5 t; p% i3 H2 t3 h: l GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;' w& s! ~6 t Q+ {- p GPIO_Init(GPIOB, &GPIO_InitStructure);& t2 I9 W* h6 s% A1 h% Q ; E8 p! r8 P* q7 Y0 R9 f+ } GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE );//重影射CAN IO脚到 PB8,PB9 1 m! s: F1 ]+ H& L b5 e //CAN单元设置9 a" A$ T2 Q. Q5 K8 Y7 y CAN_InitStructure.CAN_TTCM=DISABLE; //非时间触发通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; //软件自动离线管理 CAN_InitStructure.CAN_AWUM=DISABLE; / CAN_InitStructure.CAN_NART=ENABLE; //禁止报文自动传送 CAN_InitStructure.CAN_RFLM=DISABLE; //报文不锁定,新的覆盖旧的 + ~. D% [0 `) D( T% G3 ? CAN_InitStructure.CAN_TXFP=DISABLE; //优先级由报文标识符决定 $ Q( [0 {/ l: B+ l7 j8 B. ^9 T CAN_InitStructure.CAN_Mode= mode; //模式设置 7 Y' Y q8 Y/ S) d9 R 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& B+ k2 z$ t0 R* D1 N% S CAN_InitStructure.CAN_BS2=tbs2; //Tbs2范围CAN_BS2_1tq ~ CAN_BS2_8tq% P9 x5 Y8 k/ n1 f, n0 [ CAN_InitStructure.CAN_Prescaler=brp; //分频系数(Fdiv)为brp+1 5 R3 d( U+ N; @/ b# F2 k CAN_Init(CAN1, &CAN_InitStructure); // 初始化CAN1 0 v3 I/ ^* D3 O# u; V% U //配置过滤器 CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器0 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; e/ y, Q9 X$ Z! L6 ~7 }% w, c, M CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位 CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; ////32位ID$ c: ?( O. U5 ^% Q0 ]( K" G CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; //32位MASK CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;, x# R/ G& G6 r/ n X5 _) |( _5 U CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //过滤器0关联到FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0 CAN_FilterInit(&CAN_FilterInitStructure); //滤波器初始化" F% V3 y7 U5 j/ M& _2 | ) X, r; w+ z4 n8 f( Z9 x' q! a #if CAN1_RX0_INT_ENABLE CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许. 5 R4 V' `# j' ?' g NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;+ @+ `/ B4 U; l- d NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主优先级为1; o$ x8 b, s) x- l) ]! | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次优先级为04 ] \* G) P' J' x$ d( ^ f5 ^ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); #endif! `8 k, z1 q- Y return 0;7 A& r# P) `* b. y } " k$ i _) v8 I( i $ m* S5 H/ r' S9 C0 J/ ?( k |
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了,& A t0 R- o3 Q5 `
注明STM32F103时APB CLK = 42M,怎么配置的没看明白,待有时间的了仔细再看看。
APB CLK = 42M1 c5 _0 t6 ~" }& V
CAN1_Mode_Init(CAN_SJW_4tq, CAN_BS2_5tq, CAN_BS1_12tq, 4, mode);