|
调试STM32F103 与 STM32F407两个板子互相通信都通过了,500k波特率都没什么问题,可以在STM32F107Vc上面就是不能正确设置波特率。 波特率配置代码如下: , }) J9 X( a" ?6 {* z* i //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' ^8 [4 L+ v2 ~ //CAN1_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq, 8, mode); // 普通模式初始化,普通模式,波特率500Kbps8 K7 P' S, A& ^: K2 d2 \* F //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 几个都试了,就是不行示波器测量有波形,但与407,103发同样数据,数据周期都不一样。5 F1 i _6 _+ W9 ^: @6 } ) c2 a S& \0 g. P! R* g0 c' L 初始化函数:& t, ^) |( H" H. o# x* k8 H" | u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) {4 R- g. j+ N2 m9 n GPIO_InitTypeDef GPIO_InitStructure; CAN_InitTypeDef CAN_InitStructure;3 ], M6 W& ]: F4 ^! I6 {0 E CAN_FilterInitTypeDef CAN_FilterInitStructure; #if CAN1_RX0_INT_ENABLE NVIC_InitTypeDef NVIC_InitStructure; #endif* `" {6 R! ~: Y8 Z3 t! R //使能相关时钟/ N4 D: S' x7 Q5 P! H5 d2 j RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PORTA时钟 . \! Y/ h# Y( c3 C( R( }. g( g RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟 9 |; O7 u l: F8 Y- ~) d & k) _1 X# N# Q. M //初始化GPIO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;! @0 s; M5 Y. L r2 r# G GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 3 g4 b. X- [+ F1 B GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB8 /* Configure CAN pin: TX */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE );//重影射CAN IO脚到 PB8,PB9 9 } R, w( w, Q4 t/ z% I ' U0 i, r) b T/ W4 } //CAN单元设置6 T- H1 G$ J {4 k h CAN_InitStructure.CAN_TTCM=DISABLE; //非时间触发通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; //软件自动离线管理 ! V9 h, V Q) J4 Y( a8 J- n CAN_InitStructure.CAN_AWUM=DISABLE; / CAN_InitStructure.CAN_NART=ENABLE; //禁止报文自动传送 % L( [" t( z7 R5 o1 ^, ?5 E1 G+ k0 r CAN_InitStructure.CAN_RFLM=DISABLE; //报文不锁定,新的覆盖旧的 0 n$ z. G5 d0 U: [# Z CAN_InitStructure.CAN_TXFP=DISABLE; //优先级由报文标识符决定 . H" c; J+ c6 ^0 w+ k CAN_InitStructure.CAN_Mode= mode; //模式设置 : ~4 t" P& s4 b) j! |3 P 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_16tq9 U/ }/ r7 V% g5 S: P; `5 J 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 //配置过滤器8 A& x( F& U' ^! C+ U CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器05 Z+ j& _4 A, S# k) H& v1 N; P CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位 , [& @# M4 Z. ?2 j. l! `& o3 C CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; ////32位ID CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; //32位MASK CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;0 q6 ]5 k, [4 W' `! s! H$ f) T CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //过滤器0关联到FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器09 `' s) @7 g; V5 F9 V& M CAN_FilterInit(&CAN_FilterInitStructure); //滤波器初始化 #if CAN1_RX0_INT_ENABLE( j/ a' p# w6 |0 z" M9 S. e( x1 ]/ N( [ 7 M9 W4 u+ {0 ~ CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许. NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;8 {% h$ [! B- n$ I7 V4 p+ Y NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主优先级为1& l3 G8 f; L# ^6 l _+ S$ C NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次优先级为0% s0 n& b. q; S& B0 B. q6 N( C NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);$ H \* \! L" J% ]& F, {0 d #endif! [2 c8 n: g" b* |% }4 J9 W return 0;" R1 g1 P' M& }5 x0 p) N# ~" } } |
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,怎么配置的没看明白,待有时间的了仔细再看看。$ @: z" c! N# Q! k# U& ^: k2 U: x
APB CLK = 42M
/ p7 H- t$ x! l4 t' [* H6 o
CAN1_Mode_Init(CAN_SJW_4tq, CAN_BS2_5tq, CAN_BS1_12tq, 4, mode);