详细手册
看我上传的资源 can入门教程
本章所要实现的功能是:通过 KEY_UP 键切换 CAN 通信模式,KEY1 键控制数 据发送,将切换的 CAN 模式,发送和接收的数据通过串口打印输出,整个过程 DS0 指示灯不断闪烁,提示系统正常运行。本章我们使用的是 STM32F1 的 CAN1, 程序框架如下: (1)初始化 CAN1,包括工作模式、波特率、筛选器设置等 (2)编写 CAN1
开发步骤
(1)使能 CAN 时钟,将对应引脚复用映射为 CAN 功能 要使用 CAN,首先就是使能它的时钟,我们知道 CAN1 和 CAN2 是挂接在 APB1 总线上的,其发送和接收引脚对应不同的 STM32F1 IO(具体 IO 可以通过数据手 册查找,也可以在我们原理图上查找),因此使能 CAN 时钟后,还需要使能对应 端口的时钟,并且将其引脚配置为复用功能。因为我们使用的 STM32F103ZET6 芯片只有一个 CAN,即 CAN1,其对应的 IO 是 PA11(CAN1_RX)和 PA12(CAN1_TX)。 所以配置代码如下: 1. //使能相关时钟 2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能 PORTA 时 钟 3. RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能 CAN1 时钟 4. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PA11 5. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入模式 6. GPIO_Init(GPIOA, &GPIO_InitStructure); 7. 8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PA12 9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz 11. GPIO_Init(GPIOA, &GPIO_InitStructure); (2)设置 CAN 工作模式、波特率等 使能了 CAN 时钟后,接下来就可以通过 CAN_MCR 寄存器配置其工作模式、 波特率大小等参数。库函数中提供了 CAN_Init()函数用来完成这一步骤,函数 原型是: uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct); 函数中第一个参数是用来设置哪个 CAN,例如 CAN1;第二个参数是一个结构 体指针变量,结构体类型是 CAN_InitTypeDef,其内包含了 CAN 工作模式及波特 率初始化的成员变量。下面我们简单介绍下它的成员: 1. typedef struct 2. { 3. uint16_t CAN_Prescaler; // 4. uint8_t CAN_Mode; // 5. uint8_t CAN_SJW; // 6. uint8_t CAN_BS1; // 7.
本文详细介绍了如何在STM32F1微控制器上配置和使用CAN接口,包括初始化CAN1、设置波特率、配置筛选器、选择中断类型以及发送和接收数据的过程。重点讲解了CAN工作模式、波特率计算、筛选器配置和中断管理,并提供了相应的代码示例。
最低0.47元/天 解锁文章
1295

被折叠的 条评论
为什么被折叠?



