基于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工程负责通过CAN接收数据并决定是否更新或启动app,而app工程则专注于实现具体的业务功能。两者相辅相成,共同在实际项目中稳定运行,并且已经顺利实现量产,为产品的稳定运行提供了有力保障。希望大家能从中学到一些经验,应用到自己的开发项目中。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐