0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

带32位MCU和高精度ADC的SoC

晶华微 来源:阿红呀 作者:阿红呀 2022-02-22 10:34 次阅读

一、前言

您在使用新款芯片和新的开发环境进行开发的过程中是否会遇到以下问题:如何快速建工程?如何快速上手编程?不了解芯片功能?实现功能和预期不符?

本开发指南将手把手帮工程师们解决以上问题,了解芯片的各个模块,对照手册熟悉各个模块的寄存器配置。同时,分享一些常见的错误用法,避免您走一些弯路,从而提高开发效率。

二、程序描述

示例程序是以SD93F115-JBS芯片编写,包含了按键中断、RTC中断、SDADC、SARADC、RTC、DAC、低压检测、LCD显示、休眠测试等多个基础功能综合的一个程序,配合按键中断进入不同的子程序进行演示。

附件SD93F115-JBS_TEST是已经编写好的示例程序,其主体思路:先对芯片进行系统初始化,再对需要使用的功能进行配置,然后进入主循环通过按键中断选择置起相应的测试标志位,进入相应的测试项实现功能演示。

最后按照《软件篇》的方法将程序下载至芯片中。

三、main函数

main函数的整体框架,如图3-1:

带32位MCU和高精度ADC的SoC

图3-1 main函数

如上图所示,main函数首先运行的是Sys_MyInit()系统初始化,因为芯片上电后的默认状态下基本只有IHRC和ILRC在工作,大部分的外设都需要打开对应时钟后,才可以重新配置相应模块,后期自行开发时有需要用到的外设可参照应用手册13.7节--时钟与复位寄存器优先开启时钟。

由于IHRC是校准过的,只需从RCC_IHRC_CLBR寄存器将校准数据存入RCC_IHRC_CR寄存器即可完成校准动作,模拟部分电源BG、ACM和AVDDR默认上电是关闭的,后续也会用到,直接调用库函数打开,完成对芯片的初步配置。如下图3-2所示:

带32位MCU和高精度ADC的SoC

图3-2系统初始化函数

系统初始化之后,进行FLAG_Init()标志位初始化,该函数里的标志位是自定义的一些变量,在后续程序执行时会使用到,而在初始运行函数时,这些变量可能是随机数据,需要进行变量清零。如下图3-3所示:

带32位MCU和高精度ADC的SoC

图3-3自定义标志位初始化函数

自定义标志位初始化之后,为保证程序运行正常,在编写其他函数前,需要先编写一个IWDG_Init()独立看门狗初始化函数(脱离主函数单独计数的一个寄存器,属于硬件范畴),它能在程序跑飞的情况下,复位芯片,使程序重新开始运行。独立看门狗结构图如下图3-4:

带32位MCU和高精度ADC的SoC

图3-4独立看门狗结构图

从结构上看,独立看门狗是以低频时钟ILRC的分频为时钟源,当WDT_COUNTER计数时间超过设置值时溢出,芯片便会产生中断或复位,注意一旦独立看门狗使能后软件就无法关闭IWDG和ILRC,除非产生复位。

独立看门狗初始化函数如图3-5所示:

带32位MCU和高精度ADC的SoC

图3-5独立看门狗初始化函数

这里直接调用库函数,将独立看门狗预分频器设置8分频,溢出时间设置为23040,最后开启看门狗选择正常模式工作,待机模式不工作,在此配置下计算的复位时间t=5.76秒。

因为开启了独立看门狗,但又不希望程序在正常运行时发生复位,所以需要在正常运行的程序期间加入‘喂狗’操作,防止芯片在正常情况下复位,尤其是在执行循环过程中是需要特别注意进行‘喂狗’操作的,建议溢出时间不要设的太小。

独立看门狗初始化后,还对按键中断、PWM、SDADC、SARADC、UART、RTC和LCD显示等功能也进行了初始化,在后面的章节会详细介绍。

为了更直观的看到程序是否正常运行,先在LCD屏上显示‘123456’,然后用一个GPIO做数字输出来驱动外部LED灯进行闪烁,GPIO初始化如下图3-6:

带32位MCU和高精度ADC的SoC

图3-6 GPIO初始化函数

首先打开GPIO外设时钟使能,将P83口设置为数字输出,配置为大电流模式(最大电流可以达到12mA),为避免其他GPIO引脚悬空造成未知影响,将所有没有使用的GPIO全部配置为输入上拉模式。

宏定义了P83引脚的输出,使得控制LED灯的状态更清楚,然后在main函数的while循环里每隔50ms把P83状态翻转,即可控制LED灯的亮灭,最终程序运行PCB板的初步现象就是LCD显示‘123456’,LED灯不停闪烁,等待按键中断的来临。

带32位MCU和高精度ADC的SoC

图3-7 P83引脚输出宏定义

四、总结:

本文介绍了Main函数的整体运行流程,重点在于编程时要优先开启需要使用的外设时钟,再配合库函数的使用可以有效减少开发过程中遇到的问题,芯片的其他功能将会在后续章节逐一分享。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343587
  • adc
    adc
    +关注

    关注

    95

    文章

    5651

    浏览量

    539454
  • soc
    soc
    +关注

    关注

    38

    文章

    3745

    浏览量

    215677
收藏 人收藏

    评论

    相关推荐

    国产ADC兼容AD7793在高精度温控设备中的应用方案

    国产ADC兼容AD7793在高精度温控设备中的应用方案
    的头像 发表于 04-24 09:40 76次阅读
    国产<b class='flag-5'>ADC</b>兼容AD7793在<b class='flag-5'>高精度</b>温控设备中的应用方案

    带32位MCU高精度ADCSoC产品-SD93F系列开发指南(十)

    SD93F115 有四种工作模式,NORMAL 正常工作模式,以及 3 种低功耗模式:WAIT、 DOZE、STOP,本例将一一讲解WAIT、 DOZE、STOP模式。
    的头像 发表于 01-25 17:06 450次阅读
    带32位<b class='flag-5'>MCU</b>和<b class='flag-5'>高精度</b><b class='flag-5'>ADC</b>的<b class='flag-5'>SoC</b>产品-SD93F系列开发指南(十)

    带32位MCU高精度ADCSoC产品-SD93F系列开发指南(九)

    在开发指南(八)中,我们给大家讲解了24位高精度ADC—SD ADC,本章我们再给大家讲解12位高速ADC—SAR ADC的基本使用方法,参
    的头像 发表于 01-12 17:14 1140次阅读
    带32位<b class='flag-5'>MCU</b>和<b class='flag-5'>高精度</b><b class='flag-5'>ADC</b>的<b class='flag-5'>SoC</b>产品-SD93F系列开发指南(九)

    充气泵方案中的高精度SOC芯片

    。今天我们就来聊一下关于使用高精度SOC芯片设计开发充气泵方案的过程和技术要点。 在做一个方案设计开发时,核心功能实现是我们所关注的重点。这一重点的核心又是在主控MCU上面,所以我们使用高精度
    的头像 发表于 12-26 16:09 211次阅读

    请问要达到0.05%的测量精度,需要多少分辨率和准确度的ADC

    请问要达到0.05%的测量精度,需要多少分辨率和准确度的ADC。 能不能推荐几款,最好是能有2路同时输入的高精度ADC.
    发表于 12-18 06:54

    带32位MCU高精度ADCSoC产品-SD93F系列开发指南(八)

    在开发指南(七)中,我们简单介绍了LBT模块中低电压检测功能的测试,本章我们讲解一下24位高精度SD ADC的使用方法,详细寄存器资料参考应用手册第27章节。
    的头像 发表于 12-15 17:07 552次阅读
    带32位<b class='flag-5'>MCU</b>和<b class='flag-5'>高精度</b><b class='flag-5'>ADC</b>的<b class='flag-5'>SoC</b>产品-SD93F系列开发指南(八)

    国产MCU中 24bit 高精度ADC,如何使用?

    ARM-M0内核+24bit 高精度 ADC,如何使用?
    发表于 11-16 15:53

    【深度测评】HPM6750 MCU片内16位ADC精度测试

    【深度测评】HPM6750 MCU片内16位ADC精度测试
    的头像 发表于 10-30 17:43 1913次阅读
    【深度测评】HPM6750 <b class='flag-5'>MCU</b>片内16位<b class='flag-5'>ADC</b><b class='flag-5'>精度</b>测试

    C8051F007单片机内部的12ADC如何提高精度

    C8051F007单片机内部的12ADC ,如何提高精度
    发表于 10-17 08:11

    C8051F007单片机内部的12ADC如何提高精度

    C8051F007单片机内部的12ADC ,如何提高精度
    发表于 10-16 14:04

    OTP ADC型单片机SC8P171xE 内置高精度RC振荡和LCD驱动模块

    个,内置LVD模块、WDT、LCD、PWM模块,高精度的12ADC和8定时器,内建高精度1.2V基准电压。工业级标准设计,可工作在-40
    发表于 09-27 15:29

    HPM系列MCU 高精度ADC之误差分析和设计指南

    电子发烧友网站提供《HPM系列MCU 高精度ADC之误差分析和设计指南.pdf》资料免费下载
    发表于 09-19 15:45 0次下载
    HPM系列<b class='flag-5'>MCU</b> <b class='flag-5'>高精度</b><b class='flag-5'>ADC</b>之误差分析和设计指南

    SAR ADC的工作原理是什么?SAR ADC的优点和缺点有哪些?

    SAR ADC 是逐次逼近 ADC 的简称(successive approximation register),SAR ADC 的主要优点是低功耗、小尺寸、高精度,分辨率和速度适中,
    的头像 发表于 09-08 09:57 8016次阅读
    SAR <b class='flag-5'>ADC</b>的工作原理是什么?SAR <b class='flag-5'>ADC</b>的优点和缺点有哪些?

    24Bit ADC高精度低功耗MCU医疗级别设备参考设计(附上高精确算法+电路原理图)

    24Bit ADC高精度低功耗MCU医疗级别设备参考设计(附上高精确算法+电路原理图)
    的头像 发表于 08-08 16:30 1978次阅读
    24Bit <b class='flag-5'>ADC</b><b class='flag-5'>高精度</b>低功耗<b class='flag-5'>MCU</b>医疗级别设备参考设计(附上高精确算法+电路原理图)

    2.0V至4.5V,主频8MHz/16MHz 高精度测量SoC—CMS8H120x系列

    主频8MHz/16MHz;工作电压2.0V至4.5V;提供4KB ROM,256B RAM ,128B EEPROM ;内置24高精度Sigma-Delta ADC,支持2路差分输入,增益可选2
    发表于 05-17 09:17