您在使用新款芯片和新的开发环境进行开发的过程中是否会遇到以下问题:如何快速建工程?如何快速上手编程?不了解芯片功能?实现功能和预期不符?
本开发指南将手把手帮工程师们解决以上问题,了解芯片的各个模块,对照手册熟悉各个模块的寄存器配置。同时,分享一些常见的错误用法,避免您走一些弯路,从而提高开发效率。
二、程序描述示例程序是以SD93F115-JBS芯片编写,包含了按键中断、RTC中断、SDADC、SARADC、RTC、DAC、低压检测、LCD显示、休眠测试等多个基础功能综合的一个程序,配合按键中断进入不同的子程序进行演示。
>附件SD93F115-JBS_TEST是已经编写好的示例程序,其主体思路:先对芯片进行系统初始化,再对需要使用的功能进行配置,然后进入主循环通过按键中断选择置起相应的测试标志位,进入相应的测试项实现功能演示。
最后按照《软件篇》的方法将程序下载至芯片中。
三、main函数main函数的整体框架,如图3-1:
图3-1 main函数
如上图所示,main函数首先运行的是Sys_MyInit()系统初始化,因为芯片上电后的默认状态下基本只有IHRC和ILRC在工作,大部分的外设都需要打开对应时钟后,才可以重新配置相应模块,后期自行开发时有需要用到的外设可参照应用手册13.7节--时钟与复位寄存器优先开启时钟。
由于IHRC是校准过的,只需从RCC_IHRC_CLBR寄存器将校准数据存入RCC_IHRC_CR寄存器即可完成校准动作,模拟部分电源BG、ACM和AVDDR默认上电是关闭的,后续也会用到,直接调用库函数打开,完成对芯片的初步配置。如下图3-2所示:
图3-2 系统初始化函数
系统初始化之后,进行FLAG_Init()标志位初始化,该函数里的标志位是自定义的一些变量,在后续程序执行时会使用到,而在初始运行函数时,这些变量可能是随机数据,需要进行变量清零。如下图3-3所示:
图3-3 自定义标志位初始化函数
自定义标志位初始化之后,为保证程序运行正常,在编写其他函数前,需要先编写一个IWDG_Init()独立看门狗初始化函数(脱离主函数单独计数的一个寄存器,属于硬件范畴),它能在程序跑飞的情况下,复位芯片,使程序重新开始运行。独立看门狗结构图如下图3-4:
图3-4 独立看门狗结构图
从结构上看,独立看门狗是以低频时钟ILRC的分频为时钟源,当WDT_COUNTER计数时间超过设置值时溢出,芯片便会产生中断或复位,注意一旦独立看门狗使能后软件就无法关闭IWDG和ILRC,除非产生复位。
独立看门狗初始化函数如图3-5所示:
图3-5 独立看门狗初始化函数
这里直接调用库函数,将独立看门狗预分频器设置8分频,溢出时间设置为23040,最后开启看门狗选择正常模式工作,待机模式不工作,在此配置下计算的复位时间t=5.76秒。
因为开启了独立看门狗,但又不希望程序在正常运行时发生复位,所以需要在正常运行的程序期间加入‘喂狗’操作,防止芯片在正常情况下复位,尤其是在执行循环过程中是需要特别注意进行‘喂狗’操作的,建议溢出时间不要设的太小。
独立看门狗初始化后,还对按键中断、PWM、SDADC、SARADC、UART、RTC和LCD显示等功能也进行了初始化,在后面的章节会详细介绍。
为了更直观的看到程序是否正常运行,先在LCD屏上显示‘123456’,然后用一个GPIO做数字输出来驱动外部LED灯进行闪烁,GPIO初始化如下图3-6:
图3-6 GPIO初始化函数
首先打开GPIO外设时钟使能,将P83口设置为数字输出,配置为大电流模式(最大电流可以达到12mA),为避免其他GPIO引脚悬空造成未知影响,将所有没有使用的GPIO全部配置为输入上拉模式。
宏定义了P83引脚的输出,使得控制LED灯的状态更清楚,然后在main函数的while循环里每隔50ms把P83状态翻转,即可控制LED灯的亮灭,最终程序运行PCB板的初步现象就是LCD显示‘123456’,LED灯不停闪烁,等待按键中断的来临。
图3-7 P83引脚输出宏定义
四、总结:本文介绍了Main函数的整体运行流程,重点在于编程时要优先开启需要使用的外设时钟,再配合库函数的使用可以有效减少开发过程中遇到的问题,芯片的其他功能将会在后续章节逐一分享。
文章评论(0条评论)
登录后参与讨论