ADC采集DMA传输LCD显示

本实验是针对学习完DMA和ADC的内容做的一个综合小实验:通过ADC1通道进行数据采集利用DMA1传输上LCD显示。

主要考察对ADC的基本了解及采样时间计算一下是ADC1初始化片段:

 

 DMA主要考察对DMA的外设及存储器的配置及对DMA的模式基本了解一下是DMA的配置步骤:

 对于main的配置,本实验是用正点原子的开发板去实现整体功能:

 整体的实现效果如下所示:

个人心得:第一次写博客代码逻辑方面可能会有点问题,我相信在学习stm32的路子上多做实验才能巩固自己和提升自己

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于STM32ADC电压采集LCD1602显示-源文件1主要包含了ADC的初始化、读取电压值、LCD初始化以及显示电压值等功能。下面是一个简单的示例源代码: #include "stm32f10x.h" #include "delay.h" #include "lcd1602.h" void ADC_Init(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 开启 ADC1 和 GPIOA 的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE); // 配置 ADC1 的模拟输入通道为 PA4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // ADC 初始化设置 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 单通道独立模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 禁止扫描模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 禁止连续转换模式 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 右对齐 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 不使用外部触发 ADC_InitStructure.ADC_NbrOfChannel = 1; // 只转换一个通道 ADC_Init(ADC1, &ADC_InitStructure); // 使能 ADC1 的 DMA 传输 ADC_DMACmd(ADC1, ENABLE); // 开启 ADC ADC_Cmd(ADC1, ENABLE); // 校准 ADC ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); } uint16_t ADC_GetValue(void) { // 设置要转换的通道 ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_55Cycles5); // 开始转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 等待转换完成 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); // 返回转换结果 return ADC_GetConversionValue(ADC1); } void LCD_Init(void) { // 初始化 LCD1602 LCD1602_Init(); } void displayVoltage(uint16_t voltage) { char str[16] = {0}; sprintf(str, "Voltage: %d.%02dV", voltage / 100, voltage % 100); LCD1602_SetCursor(0, 0); LCD1602_WriteString(str); } int main(void) { uint16_t voltage; // 初始化 ADC ADC_Init(); // 初始化 LCD LCD_Init(); while (1) { // 获取 ADC 转换结果 voltage = ADC_GetValue(); // 显示电压值 displayVoltage(voltage); // 延时一段时间 delay_ms(1000); } } 这段代码中,首先对ADCLCD进行了初始化配置。然后在主循环中,不断获取ADC的转换结果,并通过LCD显示电压值。延时函数delay_ms()用于控制刷新频率。可以根据需要调整延时时间以达到合适的显示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DENG YIRU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值