国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32F103:ADC采樣——定時器觸發(fā)+DMA傳輸

這篇具有很好參考價值的文章主要介紹了STM32F103:ADC采樣——定時器觸發(fā)+DMA傳輸。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)ADC多通道采樣,采用DMA傳輸,采樣由定時器觸發(fā)

初始化代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-621940.html

void  Adc_Init(void)
{ 		
	GPIO_InitTypeDef GPIO_InitStructure;
	DMA_InitTypeDef DMA_InitStructure;
	ADC_InitTypeDef ADC_InitStructure;	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );
	
	// IO口
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//ADC0
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//ADC1
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//ADC2
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	// IO口
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//ADC3
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//ADC4
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//ADC5
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//ADC6
	GPIO_Init(GPIOA, &GPIO_InitStructure);		
	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);	
	DMA_DeInit(DMA1_Channel1);
	
	DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; // ADC地址
	DMA_InitStructure.DMA_MemoryBaseAddr = (u32) &ADC_ConvertedValue;  // 內(nèi)存地址
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
	DMA_InitStructure.DMA_BufferSize = 448;
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外設(shè)地址固定
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; // 內(nèi)存地址改變
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; 
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; 
	DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 循環(huán)
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);

	DMA_ClearITPendingBit(DMA1_IT_TC1);
	DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE); // 允許傳輸完成中斷
	
	DMA_Cmd(DMA1_Channel1,ENABLE);

	ADC_DeInit(ADC1);  //?′??ADC1 
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	// 獨立模式
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;	// 多通道掃描
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	// 不使能連續(xù)
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2; // ADC觸發(fā)事件
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	// 右對齊
	ADC_InitStructure.ADC_NbrOfChannel = 7;	// 掃描通道數(shù)量
	ADC_Init(ADC1, &ADC_InitStructure);
//	ADC_TempSensorVrefintCmd(ENABLE); // 內(nèi)部溫度傳感器

	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   // ADC時鐘分頻

	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_7Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_7Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_7Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_7Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_7Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 7, ADC_SampleTime_7Cycles5);

	ADC_DMACmd(ADC1, ENABLE); // 使用DMA模式

	ADC_Cmd(ADC1, ENABLE);	// 使能ADC

	// ADC校準
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1));

	ADC_ExternalTrigConvCmd(ADC1, ENABLE);		// 使能外部事件觸發(fā)	
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	
	TIM_TimeBaseStructure.TIM_Period = 255;
	TIM_TimeBaseStructure.TIM_Prescaler = 99; // 頻率3.2kHz
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 1000;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);
	
	TIM_Cmd(TIM2, ENABLE);	
}

到了這里,關(guān)于STM32F103:ADC采樣——定時器觸發(fā)+DMA傳輸?shù)奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32F103定時器引腳重定義功能問題處理

    STM32F103定時器引腳重定義功能問題處理

    1、概要 在一個項目中,使用STM32F103RCT6單片機,定時器引腳使用的PC6,PC6默認復用定時器為TIM8_CH1,但是由于其他原因,不能使用TIM8_CH1,因此需要使用其重定義功能TIM3_CH1,本文分享了本人在該項目中定時器TIM3引腳復用功能重定義的一些問題及解決過程,希望對大家能有幫助

    2024年02月10日
    瀏覽(99)
  • 【單片機】STM32單片機的各個定時器的定時中斷程序,標準庫,STM32F103

    【單片機】STM32單片機的各個定時器的定時中斷程序,標準庫,STM32F103

    高級定時器和普通定時器的區(qū)別(https://zhuanlan.zhihu.com/p/557896041): TIM1是高級定時器,使用的時鐘總線是RCC_APB2Periph_TIM1,和普通定時器不一樣。 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用

    2024年02月07日
    瀏覽(27)
  • 基于stm32f103c8t6的定時器詳解(持續(xù)更新)

    基于stm32f103c8t6的定時器詳解(持續(xù)更新)

    先聲明:stm32f103c8t6中沒有基本定時器、只有TIM1-TIM4:分別是高級定時器和通用定時器(對照下圖請自行閱讀stm32f103x的datasheet) 1、定時器功能:定時、輸出比較、輸入捕獲、互補輸出,其中基本定時器只有定時功能、通用定時器只沒有互補輸出功能、高級定時器具有所有功能

    2023年04月24日
    瀏覽(28)
  • 2.基于正點原子STM32F103的定時器中斷實驗(HAL庫實現(xiàn))(cubeMX)

    2.基于正點原子STM32F103的定時器中斷實驗(HAL庫實現(xiàn))(cubeMX)

    ? 基本上每一款MCU都會配備定時器這個外設(shè),STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。 同樣,STM32F1系列的定時器功能也很強大,包括: TIM1和TIM8兩個高級定時器; TIM2~TIM5是個通用寄存器; TIM7,TIM8,兩個基本定時器。 由于本次實驗適用于新手入門

    2023年04月26日
    瀏覽(27)
  • 【單片機】STM32單片機,定時器的輸入捕獲,基于捕獲的頻率計,STM32F103

    【單片機】STM32單片機,定時器的輸入捕獲,基于捕獲的頻率計,STM32F103

    下面的定時器都具有輸入捕獲能力: 查看另一篇文章:https://qq742971636.blog.csdn.net/article/details/131471539 外部計數(shù)頻率計的缺點:需要兩個定時器配合,最高能測量的頻率是否有限制我沒具體嘗試。 基于捕獲的頻率計的缺點:最高能測量的頻率有限制。 TIM3_CH1 PWM PA6 10KHZ。 輸入

    2024年02月14日
    瀏覽(27)
  • STM32F103RCT6開發(fā)板M3單片機教程06--定時器中斷

    STM32F103RCT6開發(fā)板M3單片機教程06--定時器中斷

    除非特別說明,本章節(jié)描述的模塊應(yīng)用于整個 STM32F103xx 微控制器系列,因為我們使用是 STM32F103RCT6開發(fā)板是mini最小系統(tǒng)板。 本教程使用是( 光明谷SUN_STM32mini開發(fā)板 ) ? 首先了解一下是STM32F10X定時器(Timer) ? 注: 小容量產(chǎn)品是指閃存存儲器容量在16K至32K字節(jié)之間的STM32F101

    2024年02月04日
    瀏覽(99)
  • 基于STM32F103C8T6單片機的1秒定時器設(shè)計與應(yīng)用

    標題:基于STM32F103C8T6單片機的1秒定時器設(shè)計與應(yīng)用 摘要: 本文主要探討了如何在STM32F103C8T6微控制器上利用內(nèi)部定時器實現(xiàn)精確的1秒鐘定時功能,并通過實際項目實施,驗證其穩(wěn)定性和可靠性。首先介紹了STM32F103C8T6單片機的特性及其定時器資源,然后詳細闡述了基于TIMx(

    2024年01月18日
    瀏覽(27)
  • 基于STM32F103C8T6的端口重映射及定時器輸出PWM控制

    基于STM32F103C8T6的端口重映射及定時器輸出PWM控制

    #一、端口重映射原理及部分/完全重映射 #二、端口重映射的配置 #三、PWM控制 ##1、通用定時器輸出PWM ##2、PWM的工作原理 ##3、PWM的內(nèi)部運作機制 ##4、PWM的模式 ##5、自動加載的預載寄存器 #四、定時器輸出PWM結(jié)構(gòu)體及庫函數(shù)的配置 #五、項目硬件 #六、項目代碼 一、端口重映射

    2024年02月13日
    瀏覽(22)
  • GD32F103x 定時器

    GD32F103x 定時器

    STM32的定時器主要分為三種: 高級定時器、通用定時器、基本定時器 。 即:高級定時器具有捕獲/比較通道和互補輸出,死區(qū)時間,通用定時器只有捕獲/比較通道,基本定時器沒有以上兩者。? 1. 基本定時器 1.時鐘源 時鐘源來自RCC的CK_TIMER,就是內(nèi)部時鐘(CK_INT)直接經(jīng)過控

    2024年02月07日
    瀏覽(21)
  • STM32F103C8T6定時器實現(xiàn)led的周期閃爍及PWM實現(xiàn)流水燈

    STM32F103C8T6定時器實現(xiàn)led的周期閃爍及PWM實現(xiàn)流水燈

    通過定時器Timer方式實現(xiàn)時間的精準控制,相當于給CPU上了一個鬧鐘,CPU平時處理其它任務(wù),當定時時間到了以后,處理定時相關(guān)的任務(wù)。請設(shè)置一個5秒的定時器,每隔5秒從串口發(fā)送“hello windows!”;同時設(shè)置一個2秒的定時器,讓LED等周期性地閃爍。 使用TIM3和TIM4,分別輸

    2024年01月23日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包