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

更多推荐

所有评论(0)