基于STM32F103的CAN bootload程序源码实践

张开发
2026/4/5 10:34:24 15 分钟阅读

分享文章

基于STM32F103的CAN bootload程序源码实践
基于STM32F103的CAN bootload程序源码 内容 包含boot和app两个工程已应用到实际项目并量产在嵌入式开发领域CAN bootload程序有着举足轻重的地位。今天就来和大家分享基于STM32F103的CAN bootload程序源码这可是包含boot和app两个工程并且已经成功应用到实际项目还实现量产的哦。Boot工程初始化CAN外设void CAN_Init(void) { CAN_InitTypeDef CAN_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 使能CAN和GPIO时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置PA11 (CAN_RX)为浮空输入 GPIO_InitStructure.GPIO_Pin GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); // 配置PA12 (CAN_TX)为复用推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_Init(GPIOA, GPIO_InitStructure); // CAN基本配置 CAN_InitStructure.CAN_TTCM DISABLE; CAN_InitStructure.CAN_ABOM DISABLE; CAN_InitStructure.CAN_AWUM DISABLE; CAN_InitStructure.CAN_NART DISABLE; CAN_InitStructure.CAN_RFLM DISABLE; CAN_InitStructure.CAN_TXFP DISABLE; CAN_InitStructure.CAN_Mode CAN_Mode_Normal; CAN_InitStructure.CAN_SJW CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 CAN_BS1_5tq; CAN_InitStructure.CAN_BS2 CAN_BS2_4tq; CAN_InitStructure.CAN_Prescaler 3; CAN_Init(CAN1, CAN_InitStructure); }这里我们先初始化了CAN的GPIO引脚然后对CAN外设进行配置。CAN的模式设置为Normal采样点等参数也进行了相应设定这里的分频器设置为3决定了CAN的波特率。接收CAN数据void CAN_Receive_Data(void) { CanRxMsg RxMessage; if (CAN_MessagePending(CAN1, CAN_FIFO0)! 0) { CAN_Receive(CAN1, CAN_FIFO0, RxMessage); // 处理接收到的数据 // 比如检查是否为更新指令然后进行相应操作 } }这段代码通过检查CAN_FIFO0是否有等待处理的消息若有则接收消息。接收后的数据可以进一步分析例如判断是否为启动app的指令或者是数据更新包等。App工程主程序入口int main(void) { // 初始化相关外设如GPIO、USART等 SystemInit(); GPIO_Init(); USART_Init(); while (1) { // 执行应用程序的主要功能 // 比如采集传感器数据控制执行机构等 } }在app工程的主函数中首先初始化了系统以及其他相关外设。之后进入一个无限循环在循环里执行应用程序的核心功能例如传感器数据采集和执行机构控制等实际业务逻辑。基于STM32F103的CAN bootload程序源码 内容 包含boot和app两个工程已应用到实际项目并量产这套基于STM32F103的CAN bootload程序源码boot工程负责通过CAN接收数据并决定是否更新或启动app而app工程则专注于实现具体的业务功能。两者相辅相成共同在实际项目中稳定运行并且已经顺利实现量产为产品的稳定运行提供了有力保障。希望大家能从中学到一些经验应用到自己的开发项目中。

更多文章