STM32采集光照强度显示波形

硬件配置

  单片机型号:STM32F103C8
  屏幕:0.96寸OLED屏
  传感器:光照传感器(ADC采集)

功能实现

  光照强度采集ADC方式采集,STM32F103本身自带有硬件ADC功能。将采集到的数据实时刷新到屏幕上即可完成波形显示。
  0.96寸OLED分辨率为128*64(128列,64行)。我们可以定义一个数组buff[128],数组下标作为横坐标,数组中的值作为纵坐标。这样即可把采集到的值实时刷新即可。由于需要先采集的数据先显示,这样就可以采用环形队列特性实现波形显示。关于环形队列的示例可以参考示例:https://blog.csdn.net/weixin_44453694/article/details/113502472

效果展示


代码示例

  • 主函数
int main()
{u8 cnt=40;u8 buff[20];Beep_Init();//蜂鸣器初始化Usartx_Init(USART1,115200,72);TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20msOLED_Init();//OLED初始化OLED_Display_Font(8,0,16,5);//光OLED_Display_Font(8+16,0,16,6);//照OLED_Display_Font(8+16*2,0,16,7);//强OLED_Display_Font(8+16*3,0,16,8);//度OLED_Refresh_PageGram();ADC1_InjectionChannel_Init();printf("串口初始化完成\r\n");while(1){ADC1->CR2|=1<<21;//开启注入通道转换Delay_Ms(1);while(adc.adc_len){OLED_RowGram_Clear(adc.r);OLED_DrawPoint(adc.r,adc.buff[adc.r],1);adc.r=(adc.r+1)%ADC_LEN;adc.adc_len--;//缓冲区长度-1}OLED_RefreshGram();//更新数据到屏幕cnt++;if(cnt>=40){cnt=0;snprintf((char *)buff,20,"%d",ADC_Data);OLED_Display_str(16+16*4,0,16,buff);//显示光照值OLED_Display_Font(8,0,16,5);OLED_Display_Font(8+16,0,16,6);OLED_Display_Font(8+16*2,0,16,7);OLED_Display_Font(8+16*3,0,16,8);OLED_Refresh_PageGram();//更新数据到屏幕}}
}
  • 硬件ADC配置
#include "adc.h"
/********************注入通道配置********************/
void ADC1_InjectionChannel_Init(void)
{//1.开时钟RCC->APB2ENR|=1<<9;//ADC1时钟RCC->APB2ENR|=1<<3;//PB0时钟RCC->APB2RSTR|=1<<9;//ADC复位时钟RCC->APB2RSTR&=~(1<<9);//关复位/*2.GPIO配置*/GPIOB->CRL&=0xFFFFFFF0;//模式输入方式/*3.ADC时钟频率配置*/RCC->CFGR&=~(0x3<<14);//清除原来配置RCC->CFGR|=0x2<<14;//ADC工作频率72MHZ/6=12MZH/*4.配置ADC核心寄存器*/
//  ADC1->CR1&=~(0xF<<16);//独立模式ADC1->CR1|=1<<8;//扫描模式ADC1->CR2|=1<<23;//启动温度传感器(测量CPU温度)ADC1->CR2|=1<<15;//注入通道外部触发转换模式ADC1->CR2|=0x7<<12;//注入通道事件方式启动转换
//  ADC1->CR2&=~(1<<11);//右对齐(地位对齐,高位补0)ADC1->SMPR1|=0x7<<18;//温度传感器采样时间通道16ADC1->SMPR2|=0x2<<24;//通道8采用时间
//  ADC1->CR2&=~(1<<1);//单次转换模式ADC1->JSQR|=0x1<<20;//注入通道转换序列的通道数为2/*设置要转换通道*/ADC1->JSQR&=~(0x1F<<15);//清除原来寄存器中值ADC1->JSQR|=(8<<15);ADC1->JSQR&=~(0x1F<<10);//清除第三个注入序列中的值ADC1->JSQR|=(16<<10);/*开中断*/ADC1->CR1|=1<<7;//开启注入通道中断STM32_NVIC_SetPriority(ADC1_2_IRQn,1,1);//设置优先级ADC1->CR2|=1<<0;//开启ADCADC1->CR2|=1<<3;//初始化校准while(ADC1->CR2&1<<3);//等待初始化校准完成ADC1->CR2|=1<<2;//开始校准while(ADC1->CR2&1<<2){}//等待校准完成
}
/************ADC中断服务函数*******************/
u16 ADC_Data=0;
ADC_DATA adc;//获取的光照强度结构体数据
void ADC1_2_IRQHandler(void)
{u16 data;if(ADC1->SR&1<<2)//注如通道转完成标志{ADC_Data=ADC1->JDR2;data=10+ADC_Data*(64.0/4095.0);if(data>63)data=63;//保证ADC采集的值为10~63,保证和屏幕高度一致adc.buff[adc.w]=data;//写入数据到缓冲区adc.w=(adc.w+1)%ADC_LEN;adc.adc_len++; }ADC1->SR=0;
}

示例代码链接:https://download.csdn.net/download/weixin_44453694/14983666

STM32采集光照强度显示波形相关推荐

  1. 基于单片机超声波视力保护系统设计-基于51单片机8音键电子琴仿真设计-基于8086八路模拟信号采集均值显示系统设计-基于8086八路数据电压温度采集系统-基于8086波形发生器仿真设计【毕设课设分享】

    539基于单片机超声波视力保护系统设计-设计资料 硬件构成:单片机+最小系统+LCD1602液晶显示模块+超声波模块+DS18B20温度采集模块+光线检测模块+ADC0832模块+蜂鸣器模块+LED指 ...

  2. STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)

    目录 元器件类型选择 接线表设计 实现过程 标准库实现 HAL库实现 代码下载 元器件类型选择 单片机选择:STM32F103 光照度模块:维特智能出品的 BH1750 模块被企业封装过,将采集的光照 ...

  3. 基于STM32的频谱分析和波形识别系统

    目录 1.概述 2.硬件设计 3.软件设计 4.测试结果 1.概述 本篇介绍了以STM32F103单片机为核心的频谱分析和波形识别系统,并对其硬件组成和软件设计做了详细讲解.该系统通过STM32F10 ...

  4. 怎么样采集声音的波形和频率_示波器采集模式

    示波器采集模式决定由示波器从模拟-数字转换器(简称ADC)所获取的采样点如何与波形点相结合及显示.下面的采集模式是最常见的: 普通或实时采集模式 这是最基本的采样模式,在这种情况下,一个波形点在每一个 ...

  5. STM32F4时钟触发ADC双通道采样DMA传输进行FFT+测频率+采样频率可变+显示波形(详细解读)...

    此文转载自:https://blog.csdn.net/qq_45620831/article/details/110819495 写在前面的婆婆妈妈的话 本人大三,参加过数次电赛,来CSDN好久, ...

  6. stm32 基于TouchGFX显示视频动画的详细制作过程和讲解

    stm32 使用TouchGFX显示太空人动画详细制作过程 文章目录 1.素材处理 2.Touchgfx移植 3.使用控件animated image 4.仿真和烧录看效果 5.增加启动和暂停控制 1 ...

  7. 基于STM32进行OLED显示

    目录 一.SPI接口简介 1.SPI的简介 2. SPI 接口4条线通信: 3.SPI的特征 4.接口框图 5.SPI整体的通讯过程 二.OLED的原理 1.OLED模块参数 2.该模块的特点: 3. ...

  8. STM32F4时钟触发ADC双通道采样DMA传输进行FFT+测频率+采样频率可变+显示波形(详细解读)

    写在前面的婆婆妈妈的话(代码链接在最下方) 本人大三,参加过数次电赛,来CSDN好久, 每次都是在绝望中从这里找到了希望,每次都仿佛一个即将被怪兽打翻的小船突然被危险流浪者救起来.是众多前辈的智慧,让 ...

  9. (原创)基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示

    在(原创基于ZedBoard的Webcam设计(一):Zedboard上的USB摄像头(V4L2接口)的图片采集中,我们完成了ZedBoard上USB摄像头的单幅图片采集,采集到的图片是存储在文件系统 ...

最新文章

  1. 2021年大数据Flink(十五):流批一体API Connectors ​​​​​​​Kafka
  2. 本科计算机专业考北大软微,2022北京大学软微学院计算机智能科技考研必看经验指导(含复试解析)...
  3. kotlin中学习笔记——null
  4. JavaScript:constructor属性
  5. python文件按行读取变为嵌套列表_迭代两个嵌套的2D列表,其中list2具有list1的行号...
  6. ASP.NET MVC 4 内容映射
  7. php if多条件_通过几个案例掌握shell编程条件分支结构
  8. python接口自动化4-绕过验证码登录(cookie) (转载)
  9. 9.深入浅出:集成运放内部电路分析——参考《模拟电子技术基础》清华大学华成英主讲
  10. 宾馆管理系统(做了ppt忘记发博客了)
  11. c语言char几个字节为什么,为什么在C语言中char是1个字节(Why char is of 1 byte in C language)...
  12. fullpage.js版本3.0.9报错问题(licenseKey)
  13. 【CSS】美化网页元素+盒子模型
  14. AJAX+Servlet实现客户端无刷新请求服务器实践
  15. adblockplus简单介绍
  16. PDA 手持式智能终端和 RFID 技术
  17. 有没有视频合并软件?合并视频这样做
  18. NOIP2014、2015普及组初赛难点整理
  19. Python-模拟鼠标键盘动作
  20. 汽车零售软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 使用html5-qrcode 扫描二维码(vue3)
  2. 计算机视觉数据集处理
  3. 如何将一个PPT生成一个二维码?扫码就能查看文件内容
  4. pytest单元测试框架基本操作
  5. 每周一磁 · 表磁-表场-中心表磁
  6. dymola学习笔记-第五天——学习软件自带教程DymolaUserManualVolume1,page104-最后
  7. java 时间 pt_与Java pt 1交互
  8. 网络机顶盒usb调试模式打开
  9. .net 打开服务器文档,net 网络
  10. 擅长To C的腾讯,如何借腾讯云在这几个行业云市场占有率第一?...