个人学习stm32 DMA_AD采集温度
来源:互联网 发布:手机淘宝结算不了 编辑:程序博客网 时间:2024/05/03 11:17
#include "advalue.h"
#include "gpioconfig.h"
#include "stm32f10x_dac.h"
#include "variable.h"
extern struct Flag flag;
u32 getADValue[100]={0};
u16 getdata [3] ={1,2,3};
static DMA_InitTypeDef DMA_InitStructure;
static ADC_InitTypeDef ADC_InitStructure;
void adc_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // positive rotate signal input
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure); //in put
//---------------------??AD???--------------------
//DMA1??1??
DMA_DeInit(DMA1_Channel1);
//????
DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)( &(ADC1->DR));
//????
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)getADValue;
//dma??????
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
//??DMA??????????
DMA_InitStructure.DMA_BufferSize = 20;
//??DMA???????,????
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
//??DMA???????
DMA_InitStructure.DMA_MemoryInc =DMA_MemoryInc_Enable; // DMA_MemoryInc_Enable;
//??????
DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Word;
//??????
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
//??DMA?????:?????????
DMA_InitStructure.DMA_Mode =DMA_Mode_Circular; //DMA_Mode_Circular;
//??DMA?????
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
//??DMA?2?memory????????
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
//????1
DMA_Cmd(DMA1_Channel1, ENABLE);
//ADC1??
//??????
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
//????
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
//????
ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;
//??????
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
//?????
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
//????????
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
//????????
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_71Cycles5);
//??ADC1?DMA
ADC_DMACmd(ADC1, ENABLE);
//??ADC1
ADC_Cmd(ADC1, ENABLE);
//??ADC1???????
ADC_ResetCalibration(ADC1);
//?????????????
while(ADC_GetResetCalibrationStatus(ADC1));
//????
ADC_StartCalibration(ADC1);
//????????
while(ADC_GetCalibrationStatus(ADC1));
//??ADC1?????
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Enable DMA channel1 IRQ Channel */
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#include "gpioconfig.h"
#include "stm32f10x_dac.h"
#include "variable.h"
extern struct Flag flag;
u32 getADValue[100]={0};
u16 getdata [3] ={1,2,3};
static DMA_InitTypeDef DMA_InitStructure;
static ADC_InitTypeDef ADC_InitStructure;
void adc_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // positive rotate signal input
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure); //in put
//---------------------??AD???--------------------
//DMA1??1??
DMA_DeInit(DMA1_Channel1);
//????
DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)( &(ADC1->DR));
//????
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)getADValue;
//dma??????
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
//??DMA??????????
DMA_InitStructure.DMA_BufferSize = 20;
//??DMA???????,????
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
//??DMA???????
DMA_InitStructure.DMA_MemoryInc =DMA_MemoryInc_Enable; // DMA_MemoryInc_Enable;
//??????
DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Word;
//??????
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
//??DMA?????:?????????
DMA_InitStructure.DMA_Mode =DMA_Mode_Circular; //DMA_Mode_Circular;
//??DMA?????
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
//??DMA?2?memory????????
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
//????1
DMA_Cmd(DMA1_Channel1, ENABLE);
//ADC1??
//??????
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
//????
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
//????
ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;
//??????
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
//?????
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
//????????
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
//????????
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_71Cycles5);
//??ADC1?DMA
ADC_DMACmd(ADC1, ENABLE);
//??ADC1
ADC_Cmd(ADC1, ENABLE);
//??ADC1???????
ADC_ResetCalibration(ADC1);
//?????????????
while(ADC_GetResetCalibrationStatus(ADC1));
//????
ADC_StartCalibration(ADC1);
//????????
while(ADC_GetCalibrationStatus(ADC1));
//??ADC1?????
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Enable DMA channel1 IRQ Channel */
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void DMA1_Channel1_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_IT_TC1))//??1??????
{
DMA_ClearITPendingBit(DMA1_IT_GL1); //????????
flag.DMA_GetOver=1;
}
}
0 0
- 个人学习stm32 DMA_AD采集温度
- 基于STM32与DS18B20的温度采集
- 基于stm32的无线多点温度采集系统设计
- 温度采集
- ble学习笔记六------------温度传感器温度采集
- zigbee学习之ADC采集芯片内部的温度
- 单片机学习札记10 用热敏电阻来采集温度
- 把基于C51的温度采集程序移植到STM32上
- 温度采集需求
- Zegbee 温度,气体,,,采集
- 树莓派远程温度采集
- PT100温度采集电路设计
- PT100温度采集电路设计
- stm32---DS18B20温度
- Stm32-实时采集数据(温度与一氧化碳)并且通过wifi模块(Esp8266)实时传输到电脑
- 温度数据采集模块简介
- Zigbee采集温度控制风扇
- STM32芯片温度的测量
- 跳转定位、墙纸、音乐、蓝牙、icould 界面的相应设置
- 二进制中1的个数
- PHP的mysqli扩展介绍和使用
- Java简介
- Deep Learning 初探(三)
- 个人学习stm32 DMA_AD采集温度
- HTML5功能强大游戏开发行业逐渐成熟
- 架构师都要懂哪些知识
- 198. House Robber
- N皇后解数量
- 属性表单属性页的使用
- PHP的SESSION和COOKIE的区别和联系
- [LeetCode]Permutation Sequence
- Bro脚本语法4-声明和语句(Declarations and Statements)