• 首页
  • 中国
  • STM32开发笔记69: 外设启动的先后次序

STM32开发笔记69: 外设启动的先后次序

2023-11-01 179浏览
百检网是一家专业的第三方检测平台,汇聚众多拥有权威资质的第三方检测机构为你提供一站式的检测服务,做检测就上百检网。百检网让检测从此检测,一份报告全国通用,专业值得信赖。

单片机型号:STM32F070F6P6

今天,在程序框架中增加了Timer16定时器驱动,但程序不能正常运行,本篇日志记录其原因。

驱动程序框架,定义了回调函数Timer16_InterruptFunction,写在main.cpp中用于逻辑层设计。Timer16_InterruptFunction调用的间隔为1ms,具体程序如下:

void Timer16_InterruptFunction(void)

{

Target.HAL.L2.Turn();

}

此程序完成以1ms为间隔L2闪烁的程序,但是将此程序烧写到目标板后,程序不能正常运行。经过调试,*后将问题锁定在启动顺序上,看一下程序外设的启动顺序,具体程序如下:

class CHAL

{

public:

CSystemInit SystemInit;

CSystemClock SystemClock;

CSystemTimer16 SystemTimer16;

CL1 L1;

CL2 L2;

CInfraredEmission InfraredEmission;

};

程序先启动的Timer16,后启动的L2,由于TImer16启动后,立刻发生中断,则会执行Timer16_InterruptFunction中的程序,而此时L2还未初始化,则造成错误发生。

知道以上原因后,解决方法很简单,调换一下启动顺序即可,程序如下:

class CHAL

{

public:

CSystemInit SystemInit;

CSystemClock SystemClock;

CL1 L1;

CL2 L2;

CSystemTimer16 SystemTimer16;

CInfraredEmission InfraredEmission;

};

此时,再运行程序,一切正常。

百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台