初级会员

- 积分
- 129
- 金钱
- 129
- 注册时间
- 2018-3-27
- 在线时间
- 28 小时
|
1金钱
把ADC采样放在了time.c的中断中,但是我改变时钟的频率的时候 发现采样频率并没有发生改变,有大神可以帮我看一下是哪里出问题了吗?
ADC函数:
**
******************************************************************************
* @file bsp_xxx.c
* @Author fire
* @version V1.0
* @date 2013-xx-xx
* @brief adc1 ó|óÃbsp / DMA Ä£ê½
******************************************************************************
* @attention
*
* êμÑ鯽ì¨:ò°»e iSO STM32 ¿a·¢°å
* ÂÛì3 :http://www.chuxue123.com
* ìÔ±| :http://firestm32.taobao.com
*
******************************************************************************
*/
#include "adc.h"
#define ADC1_DR_Address ((u32)0x40012400+0x4c)
__IO uint16_t ADC_ConvertedValue;
//__IO u16 ADC_ConvertedValueLocal;
/**
* @brief ê1ÄüADC1oíDMA1μÄê±Öó£¬3õê¼»ˉPC.01
* @param ÎT
* @retval ÎT
*/
static void ADC1_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable DMA clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* Enable ADC1 and GPIOC clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
/* Configure PC.01 as analog input */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
GPIO_Init(GPIOA, &GPIO_InitStructure); // PB0,êäèëê±2»óÃéèÖÃËùÂê
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
GPIO_Init(GPIOA, &GPIO_InitStructure); // PB1,êäèëê±2»óÃéèÖÃËùÂê
}
/**
* @brief ÅäÖÃADC1μÄ1¤×÷Ä£ê½ÎaMDAÄ£ê½
* @param ÎT
* @retval ÎT
*/
static void ADC1_Mode_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
/* DMA channel1 configuration */
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //ADCμØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //Äú′æμØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 2; //í¨μàμÄ′óD¡éèÖÃÎa2
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμØÖ·1춨
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //Äú′æμØÖ·μYÔö
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //°ë×Ö
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //Ñ-»·′«êä
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
/* Enable DMA channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
/* ADC1 configuration */
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //¶àá¢ADCÄ£ê½
//Õaàïê1óÃáËADC1μÄí¨μà9oíí¨μà8£¬ËùòÔê1Äüé¨ÃèÄ£ê½
ADC_InitStructure.ADC_ScanConvMode = ENABLE ; //½ûÖ1é¨Ãèģ꽣¬é¨ÃèÄ£ê½óÃóú¶àí¨μà2é¼ˉ
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //¿aÆôá¬Dø×a»»Ä£ê½£¬¼′2»í£μؽøDDADC×a»»
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //2»ê1óÃía2¿′¥·¢×a»»
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //2é¼ˉêy¾Yóò¶ÔÆë
ADC_InitStructure.ADC_NbrOfChannel = 2; //òa×a»»μÄí¨μàêyÄ¿2 ·Ö±eêÇí¨μà11oíí¨μà8
ADC_Init(ADC1, &ADC_InitStructure);
/*ÅäÖÃADCê±Öó£¬ÎaPCLK2μÄ8·ÖÆμ£¬¼′9MHz*/
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
/*ÅäÖÃADC1μÄí¨μà11Îa55. 5¸ö2éÑùÖüÆú£¬DòáDÎa1 */
//ÕaàïÎòÃÇÅäÖÃμÄêÇADC1μÄí¨μà8oíí¨μà9
//í¨μà8êÇÎòÃÇ×Ô¼oo¸½óμÄ¿a·¢°åμÄμçÑ1Ö죬ò2êÇ×îÏè½øDDAD×a»»μÄí¨μà
//í¨μà9êÇ¿a·¢°åéÏμÄμçÑ1Ö죬ò2êÇμú¶t′Î2aμ½μÄμçÑ1Öμ
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/*¸′λD£×¼¼Ä′æÆ÷ */
ADC_ResetCalibration(ADC1);
/*μè′yD£×¼¼Ä′æÆ÷¸′λíê3é */
while(ADC_GetResetCalibrationStatus(ADC1));
/* ADCD£×¼ */
ADC_StartCalibration(ADC1);
/* μè′yD£×¼íê3é*/
while(ADC_GetCalibrationStatus(ADC1));
/* óéóúûóD2éóÃía2¿′¥·¢£¬ËùòÔê1óÃèí¼t′¥·¢ADC×a»» */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
/**
* @brief ADC13õê¼»ˉ
* @param ÎT
* @retval ÎT
*/
void ADC1_Init(void)
{
ADC1_GPIO_Config();
ADC1_Mode_Config();
}
/*********************************************END OF FILE**********************/
时钟函数:
#include "timer.h"
#include "led.h"
#include "usart.h"
#define M 2 //2é¼ˉí¨μàμÄ×î′óêy
int flag=0;
int vol=0 ;
int volp=0;
extern __IO uint16_t ADC_ConvertedValue[M];
//////////////////////////////////////////////////////////////////////////////////
//±¾3ìDòÖ»1©Ñ§Ï°ê1óã¬Î′¾-×÷ÕßDí¿é£¬2»μÃóÃóúÆäËüèÎoÎóÃí¾
//ALIENTE¾«ó¢STM32¿a·¢°å
//¶¨ê±Æ÷ Çy¶ˉ′úÂë
//ÕyμãÔ-×ó@ALIENTEK
//¼¼êõÂÛì3:www.openedv.com
//DT¸ÄèÕÆú:2012/9/4
//°æ±¾£oV1.1
//°æè¨ËùóD£¬μá°æ±Ø¾¿¡£
//Copyright(C) 1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾ 2009-2019
//All rights reserved
//********************************************************************************
//V1.1 20120904
//1,Ôö¼óTIM3_PWM_Initoˉêy¡£
//2,Ôö¼óLED0_PWM_VALo궨ò壬¿ØÖÆTIM3_CH2Âö¿í
//////////////////////////////////////////////////////////////////////////////////
//í¨óö¨ê±Æ÷3ÖD¶Ï3õê¼»ˉ
//Õaàïê±ÖóÑ¡ÔñÎaAPB1μÄ2±¶£¬¶øAPB1Îa36M
//arr£o×Ô¶ˉ֨װÖμ¡£
//psc£oê±ÖóÔ¤·ÖÆμêy
//Õaàïê1óÃμÄêǶ¨ê±Æ÷3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±Öóê1Äü
TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ ¼Æêyμ½5000Îa500ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ 10KhzμļÆêyÆμÂê
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM3ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÏèÕ¼óÅÏè¼¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //′óóÅÏè¼¶3¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
TIM_Cmd(TIM3, ENABLE); //ê1ÄüTIMxíaéè
}
//¶¨ê±Æ÷3ÖD¶Ï·tÎñ3ìDò
void TIM3_IRQHandler(void) //TIM3ÖD¶Ï
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
{
//Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
TIM_ClearITPendingBit(TIM3, TIM_IT_Update );
//LED0=!LED0;
vol=ADC_ConvertedValue[0];
volp=ADC_ConvertedValue[1];
flag=1;
}
//DAC_SetChannel1Data(DAC_Align_12b_R, dacval);
//adcx=Get_Adc_Average(ADC_Channel_1,10);
//vol=adcx;
// printf("%6d\n",vol);
}
主函数:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
//#include "lcd.h"
#include "usart.h"
//#include "dac.h"
#include "adc.h"
#include "timer.h"
#include "usmart.h"
#include "bsp_AdvanceTim.h"
#define M 2 //2é¼ˉí¨μàμÄ×î′óêy
//int vol;
//void Dac1_Set_Vol(u16 vol);
extern __IO uint16_t ADC_ConvertedValue[M];
long int xindian1[4],xindian2[4];//′æ·ÅμÃμ½μÄμçÑ1
int adcx0=0, adcx1=0, adcx2=0,adcx3=0;
extern int flag;
extern int flag1;
int vol1=0;
extern int vol;
extern int volp;
int dacval=0;
int dacval1=0;
int k=0,n=1,i=0;
int adccount=0;
int adccount1=0;
int adccount2=0;
int max=0,min=0,mid=0;
/************************************************
ALIENTEK¾«ó¢STM32¿a·¢°åêμÑé20
DAC êμÑé
¼¼êõÖ§3Ö£owww.openedv.com
ìÔ±|μêÆì£ohttp://eboard.taobao.com
1Ø×¢Î¢DÅ1«Öúƽì¨Î¢DÅoÅ£o"ÕyμãÔ-×ó"£¬Ãa·Ñ»ñè¡STM32×êáÏ¡£
1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾
×÷ÕߣoÕyμãÔ-×ó @ALIENTEK
************************************************/
int main(void)
{
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÖD¶ÏóÅÏè¼¶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
uart_init(115200); //′®¿ú3õê¼»ˉÎa115200
//KEY_Init(); //3õê¼»ˉ°′¼ü3ìDò
LED_Init(); //LED¶Ë¿ú3õê¼»ˉ
//LCD_Init(); //LCD3õê¼»ˉ
ADC1_Init(); //ADC3õê¼»ˉ
// Dac1_Init(); //DAC3õê¼»ˉ
ADVANCE_TIM_Init();
TIM3_Int_Init(4,71);//10KhzμļÆêyÆμÂ꣬¼Æêyμ½5000Îa500ms
//TIM3_Int_Init(4999,7199);
//TIM2_PWM_Init(4999,7199);
while(1)
{
if(flag==1)
{
//DisplayCurve1(volp,vol);
if(adccount<200)
{
dacval +=vol;
dacval1 +=volp;
adccount++;
}
else
{
//dacval=dacval/200;
dacval1=dacval1/200;
dacval=dacval/200;
DisplayCurve1(dacval1,dacval);
adccount=0;
dacval=0;
dacval1=0;
}
flag=0;[mw_shl_code=c,true]/**
******************************************************************************
* @file bsp_xxx.c
* @author fire
* @version V1.0
* @date 2013-xx-xx
* @brief adc1 ó|óÃbsp / DMA Ä£ê½
******************************************************************************
* @attention
*
* êμÑ鯽ì¨:ò°»e iSO STM32 ¿a·¢°å
* ÂÛì3 :http://www.chuxue123.com
* ìÔ±| :http://firestm32.taobao.com
*
******************************************************************************
*/
#include "adc.h"
#define ADC1_DR_Address ((u32)0x40012400+0x4c)
__IO uint16_t ADC_ConvertedValue;
//__IO u16 ADC_ConvertedValueLocal;
/**
* @brief ê1ÄüADC1oíDMA1μÄê±Öó£¬3õê¼»ˉPC.01
* @param ÎT
* @retval ÎT
*/
static void ADC1_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable DMA clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* Enable ADC1 and GPIOC clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
/* Configure PC.01 as analog input */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
GPIO_Init(GPIOA, &GPIO_InitStructure); // PB0,êäèëê±2»óÃéèÖÃËùÂê
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
GPIO_Init(GPIOA, &GPIO_InitStructure); // PB1,êäèëê±2»óÃéèÖÃËùÂê
}
/**
* @brief ÅäÖÃADC1μÄ1¤×÷Ä£ê½ÎaMDAÄ£ê½
* @param ÎT
* @retval ÎT
*/
static void ADC1_Mode_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
/* DMA channel1 configuration */
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //ADCμØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //Äú′æμØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 2; //í¨μàμÄ′óD¡éèÖÃÎa2
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμØÖ·1춨
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //Äú′æμØÖ·μYÔö
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //°ë×Ö
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //Ñ-»·′«êä
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
/* Enable DMA channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
/* ADC1 configuration */
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //¶àá¢ADCÄ£ê½
//Õaàïê1óÃáËADC1μÄí¨μà9oíí¨μà8£¬ËùòÔê1Äüé¨ÃèÄ£ê½
ADC_InitStructure.ADC_ScanConvMode = ENABLE ; //½ûÖ1é¨Ãèģ꽣¬é¨ÃèÄ£ê½óÃóú¶àí¨μà2é¼ˉ
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //¿aÆôá¬Dø×a»»Ä£ê½£¬¼′2»í£μؽøDDADC×a»»
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //2»ê1óÃía2¿′¥·¢×a»»
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //2é¼ˉêy¾Yóò¶ÔÆë
ADC_InitStructure.ADC_NbrOfChannel = 2; //òa×a»»μÄí¨μàêyÄ¿2 ·Ö±eêÇí¨μà11oíí¨μà8
ADC_Init(ADC1, &ADC_InitStructure);
/*ÅäÖÃADCê±Öó£¬ÎaPCLK2μÄ8·ÖÆμ£¬¼′9MHz*/
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
/*ÅäÖÃADC1μÄí¨μà11Îa55. 5¸ö2éÑùÖüÆú£¬DòáDÎa1 */
//ÕaàïÎòÃÇÅäÖÃμÄêÇADC1μÄí¨μà8oíí¨μà9
//í¨μà8êÇÎòÃÇ×Ô¼oo¸½óμÄ¿a·¢°åμÄμçÑ1Ö죬ò2êÇ×îÏè½øDDAD×a»»μÄí¨μà
//í¨μà9êÇ¿a·¢°åéÏμÄμçÑ1Ö죬ò2êÇμú¶t′Î2aμ½μÄμçÑ1Öμ
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/*¸′λD£×¼¼Ä′æÆ÷ */
ADC_ResetCalibration(ADC1);
/*μè′yD£×¼¼Ä′æÆ÷¸′λíê3é */
while(ADC_GetResetCalibrationStatus(ADC1));
/* ADCD£×¼ */
ADC_StartCalibration(ADC1);
/* μè′yD£×¼íê3é*/
while(ADC_GetCalibrationStatus(ADC1));
/* óéóúûóD2éóÃía2¿′¥·¢£¬ËùòÔê1óÃèí¼t′¥·¢ADC×a»» */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
/**
* @brief ADC13õê¼»ˉ
* @param ÎT
* @retval ÎT
*/
void ADC1_Init(void)
{
ADC1_GPIO_Config();
ADC1_Mode_Config();
}
/*********************************************END OF FILE**********************/
#include "timer.h"
#include "led.h"
#include "usart.h"
#define M 2 //2é¼ˉí¨μàμÄ×î′óêy
int flag=0;
int vol=0 ;
int volp=0;
extern __IO uint16_t ADC_ConvertedValue[M];
//////////////////////////////////////////////////////////////////////////////////
//±¾3ìDòÖ»1©Ñ§Ï°ê1óã¬Î′¾-×÷ÕßDí¿é£¬2»μÃóÃóúÆäËüèÎoÎóÃí¾
//ALIENTE¾«ó¢STM32¿a·¢°å
//¶¨ê±Æ÷ Çy¶ˉ′úÂë
//ÕyμãÔ-×ó@ALIENTEK
//¼¼êõÂÛì3:www.openedv.com
//DT¸ÄèÕÆú:2012/9/4
//°æ±¾£oV1.1
//°æè¨ËùóD£¬μá°æ±Ø¾¿¡£
//Copyright(C) 1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾ 2009-2019
//All rights reserved
//********************************************************************************
//V1.1 20120904
//1,Ôö¼óTIM3_PWM_Initoˉêy¡£
//2,Ôö¼óLED0_PWM_VALo궨ò壬¿ØÖÆTIM3_CH2Âö¿í
//////////////////////////////////////////////////////////////////////////////////
//í¨óö¨ê±Æ÷3ÖD¶Ï3õê¼»ˉ
//Õaàïê±ÖóÑ¡ÔñÎaAPB1μÄ2±¶£¬¶øAPB1Îa36M
//arr£o×Ô¶ˉ֨װÖμ¡£
//psc£oê±ÖóÔ¤·ÖÆμêy
//Õaàïê1óÃμÄêǶ¨ê±Æ÷3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±Öóê1Äü
TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ ¼Æêyμ½5000Îa500ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ 10KhzμļÆêyÆμÂê
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM3ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÏèÕ¼óÅÏè¼¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //′óóÅÏè¼¶3¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
TIM_Cmd(TIM3, ENABLE); //ê1ÄüTIMxíaéè
}
//¶¨ê±Æ÷3ÖD¶Ï·tÎñ3ìDò
void TIM3_IRQHandler(void) //TIM3ÖD¶Ï
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
{
//Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
TIM_ClearITPendingBit(TIM3, TIM_IT_Update );
//LED0=!LED0;
vol=ADC_ConvertedValue[0];
volp=ADC_ConvertedValue[1];
flag=1;
}
//DAC_SetChannel1Data(DAC_Align_12b_R, dacval);
//adcx=Get_Adc_Average(ADC_Channel_1,10);
//vol=adcx;
// printf("%6d\n",vol);
}
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
//#include "lcd.h"
#include "usart.h"
//#include "dac.h"
#include "adc.h"
#include "timer.h"
#include "usmart.h"
#include "bsp_AdvanceTim.h"
#define M 2 //2é¼ˉí¨μàμÄ×î′óêy
//int vol;
//void Dac1_Set_Vol(u16 vol);
extern __IO uint16_t ADC_ConvertedValue[M];
long int xindian1[4],xindian2[4];//′æ·ÅμÃμ½μÄμçÑ1
int adcx0=0, adcx1=0, adcx2=0,adcx3=0;
extern int flag;
extern int flag1;
int vol1=0;
extern int vol;
extern int volp;
int dacval=0;
int dacval1=0;
int k=0,n=1,i=0;
int adccount=0;
int adccount1=0;
int adccount2=0;
int max=0,min=0,mid=0;
/************************************************
ALIENTEK¾«ó¢STM32¿a·¢°åêμÑé20
DAC êμÑé
¼¼êõÖ§3Ö£owww.openedv.com
ìÔ±|μêÆì£ohttp://eboard.taobao.com
1Ø×¢Î¢DÅ1«Öúƽì¨Î¢DÅoÅ£o"ÕyμãÔ-×ó"£¬Ãa·Ñ»ñè¡STM32×êáÏ¡£
1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾
×÷ÕߣoÕyμãÔ-×ó @ALIENTEK
************************************************/
int main(void)
{
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÖD¶ÏóÅÏè¼¶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
uart_init(115200); //′®¿ú3õê¼»ˉÎa115200
//KEY_Init(); //3õê¼»ˉ°′¼ü3ìDò
LED_Init(); //LED¶Ë¿ú3õê¼»ˉ
//LCD_Init(); //LCD3õê¼»ˉ
ADC1_Init(); //ADC3õê¼»ˉ
// Dac1_Init(); //DAC3õê¼»ˉ
ADVANCE_TIM_Init();
TIM3_Int_Init(4,71);//10KhzμļÆêyÆμÂ꣬¼Æêyμ½5000Îa500ms
//TIM3_Int_Init(4999,7199);
//TIM2_PWM_Init(4999,7199);
while(1)
{
if(flag==1)
{
//DisplayCurve1(volp,vol);
if(adccount<200)
{
dacval +=vol;
dacval1 +=volp;
adccount++;
}
else
{
//dacval=dacval/200;
dacval1=dacval1/200;
dacval=dacval/200;
DisplayCurve1(dacval1,dacval);
adccount=0;
dacval=0;
dacval1=0;
}
flag=0;
}
}
}
[/mw_shl_code] }
}
}
|
最佳答案
查看完整内容[请看2#楼]
原因找到了 当我改为35时就是每2us中断溢出,而我设定的是55.5+12.5共68个周期,又是双ADC那就变成136个周期了136/12M是113us肯定不对 要把ADC采样时间设定的比中断溢出时间小才可以
|