串口1:
ADC模数转换:
使能ADC中断使能ADC-DMA使能ADC-DMA中断
接着我发现一个问题:
我在AiCube 里这样设置ADC:
生成的ADC -DMA 初始化代码:
////////////////////////////////////////
// ADC初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void ADC_Init(void)
{
ADC_SetClockDivider(0); //设置ADC时钟
ADC_ResultRightAlign(); //设置ADC结果右对齐(12位结果)
ADC_DisableRepeatConv(); //关闭ADC自动重复转换功能
ADC_SetCSSetupCycles(0); //设置ADC通道选择建立时间
ADC_SetCSHoldCycles(1); //设置ADC通道选择保持时间
ADC_SetSampleDutyCycles(9); //设置ADC通道采样时间
ADC_DisableETR(); //禁止ADC外部触发功能
ADC_SetIntPriority(0); //设置中断为最低优先级
ADC_EnableInt(); //使能ADC中断
fADCConverted = 0; //初始化转换结束标志
ADC_ActiveChannel(4); //选择ADC通道
ADC_Enable(); //使能ADC功能
DMA_ADC_SetAmount(0); //设置ADC DMA扫描次数
DMA_ADC_SetAddress(pu8ADCDMABuffer); //设置ADC DMA缓冲区地址
DMA_ADC_SetInterval(0); //设置ADC DMA扫描间隔时间(系统时钟)
DMA_ADC_SetChannels(0x0010); //设置ADC DMA扫描通道
DMA_ADC_DisableRepeatConv(); //设置ADC DMA时每个通道重复转换次数
DMA_ADC_ClearFlag(); //清除ADC DMA中断标志
DMA_ADC_SetBusPriority(0); //设置总线访问为最低优先级
DMA_ADC_SetIntPriority(0); //设置中断为最低优先级
DMA_ADC_EnableInt(); //使能ADC DMA中断
DMA_ADC_Enable(); //使能ADC DMA功能
// DMA_ADC_Trigger(); //触发ADC DMA
//<<AICUBE_USER_ADC_INITIAL_BEGIN>>
// 在此添加用户初始化代码
//<<AICUBE_USER_ADC_INITIAL_END>>
}
为什么最后一行把 DMA_ADC_Trigger(); //触发ADC DMA
注释掉了?这样导致我第一次没有触发 DMA_ADC,dma_flag永远=0
导致电压显示永远是0? 可能STC要看一下.........
ADC DMA循环扫描次数1次
每个通道重复转换次数1次
也可能是我理解错了?
我以为第一次是自动触发的...................
继续学习:
23-RTC时钟实验
本讲主要内容:
1.实验介绍
2.硬件设计
3.软件设计
4.实验现象
1.1 实验简介
低功耗:RTC模块工作电流低至2uA@VCC-3.3V、3uA@VCC-5.OV(典型值)
长时间跨度:支持2000年~2099年,并自动判断闰年闹钟:支持一组闹钟设置
支持多个中断:
一组闹钟中断(每天中断一次,中断的时间点为闹钟寄存器所设置的任意时/分/秒)
日中断(每天中断一次,中断的时间点为每天的0时0分0秒)
小时中断(每小时中断一次,中断的时间点为分/秒均为 0,即整点时)
分钟中断(每分钟中断一次,中断的时间点为秒为0,即分钟寄存器发生变化时)
秒中断(每秒中断一次,中断的时间点为秒寄存器发生变化时>
1/2 秒中断(每1/2 秒中断一次>
1/8秒中断(每1/8秒中断一次)1/32秒中断(每1/32秒中断一次)
支持掉电唤醒
特别注意:Ai8051U系列单片机的RTC无星期功能
1.2 实验目的
数码管显示RTC时间,格式为XX-XX-XX。
2.硬件设计
本实验使用到硬件资源如下:
(1)GPIO
(2)数码管模块
(3)RTC
RTC时钟设计:
实验结果: