编程技巧(基于STM32)第三章 模式切换程序模板

参考教程:https://www.bilibili.com/video/BV19DAAzdEbz/?spm_id_from=333.1387.favlist.content.click&vd_source=8f8a7bd7765d52551c498d7eaed8acd5

一、实验前信息储备

1、模式切换程序框架

(1)每个模式都可整体划分三种行为------进入模式的准备工作、模式激活的循环工作和退出模式的收尾工作,可以将这三种行为分别封装为三个函数:

①Init:进入模式前,执行一遍Init函数,用于模式初始化工作。

②Loop:执行完Init函数后,不断循环执行Loop函数,用于模式主体功能。

③Exit:退出模式前,执行一遍Exit函数,用于收尾工作。

(2)下图所示的是由模式1切换到模式2的程序流示意图。

(3)当处于某个模式时,可能需要定期执行某些动作(比如LED状态翻转),由于要控制时间间隔,所以不适合放在Loop函数中,对此可以使用定时中断,在定时器中断函数中判断当前模式,然后执行当前模式对应的周期性动作。

2、模式切换管理

(1)可以使用CurrMode和NextMode两个变量来处理模式切换,CurrMode表示当前所处的模式,NextMode表示下一时刻希望切换的目标模式。

(2)CurrMode与NextMode相等时,说明下一时刻不需要切换目标模式,执行当前模式的Loop函数即可;CurrMode与NextMode不相等时,说明下一时刻需要切换目标模式,执行当前模式的Exit函数和目标模式的Init函数,然后将CurrMode改为目标模式,即可完成模式切换。

二、实验步骤

1、准备工作

(1)拷贝一份STM32教程中"使用OLED屏进行显示"的工程文件夹,并更名为"模式切换程序模板",同时按下图所示接好电路(OLED屏未示出,按照第一章的实验电路连接即可)。

(2)在STM32教程中"定时器定时中断"的工程文件夹中找到Timer.c和Timer.h文件,将其添加进本工程中,并将TIM2的定时时间配置为1ms。

cpp 复制代码
void Timer_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	
	TIM_InternalClockConfig(TIM2);
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;        //重装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;    //预分频系数(TIM2的频率是72MHz)
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_Cmd(TIM2, ENABLE);
}

2、程序框架编写

相关推荐
ElfBoard2 小时前
飞凌精灵(ElfBoard)技术贴|如何在RK3506开发板上实现UART功能复用
大数据·linux·人工智能·驱动开发·单片机·嵌入式硬件·物联网
踏着七彩祥云的小丑2 小时前
嵌入式——认识电子元器件——二极管系列
单片机·嵌入式硬件
Jack_02202 小时前
基于51单片机的智能电动窗帘控制OLED显示设计
单片机·嵌入式硬件·51单片机·智能家居·oled显示·电动窗帘
sz4972385993 小时前
vscode多种编译环境共存的方法
ide·vscode·stm32·编辑器·esp32
摘星台3 小时前
linux环境对stm32单片机进行程序烧录
linux·stm32·单片机
Joseph Cooper3 小时前
STM32MP157 Linux驱动学习笔记(三):系统级驱动框架(UART/PCIe)
linux·stm32·学习
森G4 小时前
STM32F103C8T6工程---标准库版usart2写回显
stm32·单片机
EVERSPIN4 小时前
基于MCU CH32X035 Type-C PD显示器方案
单片机·mcu·计算机外设
Hello_Embed5 小时前
嵌入式上位机开发入门(二十八):JSON 与 JsonRPC 入门
网络·笔记·网络协议·tcp/ip·嵌入式
Joseph Cooper5 小时前
STM32MP157 Linux驱动学习笔记(一):驱动基础与设备模型入门(同步互斥/LCD/I2C/Input)
linux·stm32·学习