|
调试STM32F103 与 STM32F407两个板子互相通信都通过了,500k波特率都没什么问题,可以在STM32F107Vc上面就是不能正确设置波特率。: x9 W/ |. F- m9 x 波特率配置代码如下:7 o- U, M* J% I5 T ) V1 _0 W3 ?4 z6 n5 w7 z8 r & U! F9 a! h! a4 e5 p; y0 K3 Z6 [1 t //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_7tq, 1, mode); // CAN普通模式初始化,普通模式,波特率500Kbps. i: N% i) u9 a( `& w/ d/ | //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( P5 s, |1 k( T+ D5 a9 m CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_1tq, CAN_BS1_4tq, 24, mode); //36m 1000k; V; M! y3 Y8 A9 U% n i 几个都试了,就是不行示波器测量有波形,但与407,103发同样数据,数据周期都不一样。; M/ o$ W2 e" I6 D7 F% H9 d # N" L1 r5 F- [ 1 c+ K1 P/ @2 O( a 初始化函数: u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) {, ^4 X5 T# p2 _ x: H+ j; A! n GPIO_InitTypeDef GPIO_InitStructure; 7 Y7 I# M! `. J- u! n9 w8 u5 k CAN_InitTypeDef CAN_InitStructure;/ n/ R4 t; H u CAN_FilterInitTypeDef CAN_FilterInitStructure;1 U9 F) F' A5 k3 z- {1 ? #if CAN1_RX0_INT_ENABLE 8 r# y% |6 y( v3 j- Z- C NVIC_InitTypeDef NVIC_InitStructure; #endif //使能相关时钟/ Z/ T% K" W& w+ D RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PORTA时钟 , u: A3 Q3 w+ O8 i RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟 //初始化GPIO2 ] h B; J6 h) J/ X0 @$ z ]" e GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;0 N9 x* E3 o. H6 n( N3 g GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 4 n2 d% q" `( M+ ^7 I: W GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB8 /* Configure CAN pin: TX */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;- i, M* B# @6 J" M- m8 Y: X# T GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;$ C; \4 l! a( c7 n GPIO_Init(GPIOB, &GPIO_InitStructure);5 Y0 }. ]3 u, p, s" I: Y, V GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE );//重影射CAN IO脚到 PB8,PB9 //CAN单元设置% G; Z9 z7 l& a CAN_InitStructure.CAN_TTCM=DISABLE; //非时间触发通信模式 9 p% T6 }; k. x4 N4 V7 D3 f" A CAN_InitStructure.CAN_ABOM=DISABLE; //软件自动离线管理 CAN_InitStructure.CAN_AWUM=DISABLE; / CAN_InitStructure.CAN_NART=ENABLE; //禁止报文自动传送 7 o% T( Y1 n5 ~$ y CAN_InitStructure.CAN_RFLM=DISABLE; //报文不锁定,新的覆盖旧的 CAN_InitStructure.CAN_TXFP=DISABLE; //优先级由报文标识符决定 / d, c: n. g5 o) j( D- g5 I/ M+ a 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* v$ l# e1 D% t7 P3 X6 [) A CAN_InitStructure.CAN_Prescaler=brp; //分频系数(Fdiv)为brp+1 / L9 B$ F; _- S# P$ }$ j. ] CAN_Init(CAN1, &CAN_InitStructure); // 初始化CAN1 //配置过滤器 CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器0 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; * i5 |9 F; H8 t CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位 CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; ////32位ID% ]6 \7 P) p* O6 M8 W( e: e CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;1 @! b4 [4 Q! D. d. K" { CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; //32位MASK CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;% i) i, {6 q) _$ i2 H: f CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //过滤器0关联到FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0 CAN_FilterInit(&CAN_FilterInitStructure); //滤波器初始化 & l9 H. k* T0 ?& Q6 b C$ z #if CAN1_RX0_INT_ENABLE , K" b4 l2 c. _) |; [ CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许. / ^- R4 k+ o5 y* B" X! u, t1 _3 b NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主优先级为1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;2 x- u9 G7 N2 P/ w7 Q NVIC_Init(&NVIC_InitStructure); #endif return 0;- F6 E) E) q' V% P- s1 u: P } |
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 Q, A3 s2 @1 S, }0 P$ _( F/ i4 u; F* C
对于STM32F107是多少
另一个107的板子电压差是1.0V,怎么会事?
keil自带的例程中系统时钟配置文件应该OK了,
注明STM32F103时APB CLK = 42M,怎么配置的没看明白,待有时间的了仔细再看看。 z8 A" w& U$ k
APB CLK = 42M( e* s+ W; k4 h1 a i/ n9 f8 p6 B
CAN1_Mode_Init(CAN_SJW_4tq, CAN_BS2_5tq, CAN_BS1_12tq, 4, mode);