当前位置: 首页 > news >正文

S32K144外设实验(三):ADC单通道连续采样(中断)

这次的实验比较简单,主要目的就是验证一下ADC的中断功能,思路是使用软件触发ADC的连续单通道采样,将采样值通过串口发送到上位机观察数是否正确。
其实官方并不推荐使用中断的方式,这种方式会占用大量的CPU资源,笔者安排这篇文章的主要目的是在使用ADC中断的时候发现了个容易忽略的问题,如下图:
ADC的配置
笔者配置了ADC通道12的连续转换并使能了通道中断,关键的点就在中断这里,通过查看SDK中的代码发现,配置后的代码并没有在SDK的初始化代码中使能NVIC中的中断开关,一定要注意在使用中断的时候配置中断优先级以及使能NVIC中的中断开关。
配置代码如下:

void AdcInit(void)
{//初始化ADC0模块ADC_DRV_ConfigConverter(INST_ADC_CONFIG_1, &adc_config_1_ConvConfig0);//ADC0校准ADC_DRV_AutoCalibration(INST_ADC_CONFIG_1);//设置抢占中断优先级INT_SYS_SetPriority(ADC0_IRQn, 12); //设置中断优先级INT_SYS_EnableIRQ(ADC0_IRQn);	//使能ADC0中断,如果使用中断必须使能
}

主程序代码如下:

uint16_t adcSel12Value = 0;
//ADC0中断服务程序
void ADC0_IRQHandler(void)
{ADC_DRV_GetChanResult(INST_ADC_CONFIG_1, 0U, &adcSel12Value);
}
int main(void)
{McuInit();		// 芯片基础初始化:时钟、GPIO、中断使能SysTickBegin();	//	SysTick定时器计时初始化Lpuart1Init();	//LPUART的初始化AdcInit();		//初始化ADC//软件启动ADC0ADC_DRV_ConfigChan(INST_ADC_CONFIG_1, 0U, &adc_config_1_ChnConfig0);while (1){printf("The Sel12 Volt is %d\r\n", adcSel12Value);DelayMsFromSysTick(300);}
}

http://www.mrgr.cn/news/95315.html

相关文章:

  • Yolo系列之Yolo的基本理解
  • Android Compose 图标按钮深度剖析:从源码到实践(五)
  • 【初探数据结构】树与二叉树
  • Powershell WSL导出导入ubuntu22.04.5子系统
  • 【PCB工艺】基础:电子元器件
  • 【leetcode hot 100 208】实现Trie(前缀树)
  • 从零实现本地文生图部署(Stable Diffusion)
  • fontTools工具的使用介绍
  • 算法刷题记录——LeetCode篇(6) [第501~600题](持续更新)
  • Powershell WSL部署ubuntu22.04.5子系统
  • The Illustrated Stable Diffusion
  • A l密码学(Deepseek)
  • 内网渗透(CSMSF) 构建内网代理的全面指南:Cobalt Strike 与 Metasploit Framework 深度解析
  • 增加对路由参数的支持
  • 单台openEuler24.03 LTS下的开源大数据环境搭建
  • 2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)
  • 高级java每日一道面试题-2025年3月07日-微服务篇[Eureka篇]-Eureka Server和Eureka Client关系?
  • Docker和Dify学习笔记
  • 详细介绍VUE,带你了解VUE!!!
  • AI对话框实现