STM32F373 HAL库操作SDADC

如何使用固件库配置F373系列的多通道SDADC?-STM32F系列-意法半导体STM32/STM8技术社区
所属分类:
浏览数:2434
提问时间:
问:自己配置单独的injected通道是可以的,使用DMA始终不能正常工作。
答:自问自答好了,DMA通道没有配置对。
回答时间:答:楼主能否发一份多通道的初始化程序给我。不胜感激,我已经困惑好久了,先谢谢了!
回答时间:答:如果用了两路SDADC ,Dma 数据要设置32位传输长度。还有,对照查找SDADC 对应的DMA 通道
回答时间:请后回答。
本书通过mbed介绍嵌入式系统设计的所有主要议题,便于读者快速掌握嵌入式系统的设计方法。
本书围绕库的分析和使用,对综合运用固件库开发项目给出了具体范例,循序渐进、系统地掌握。
本书结合官方手册和例程,全面、系统介绍了STM32F103各项功能,是学习STM32的入门教材。
Tel: 3-8064
备案号: 苏ICP备号-2查看: 1178|回复: 2
STM32F373:SDADC1、2、3三路多通道+DMA采集电压
主题帖子精华
新手入门, 积分 3, 距离下一级还需 17 积分
在线时间6 小时
需求:用较多adc通道来采集多路(至少16路)电压。现看中F373系列有21个采样通道(尽可能全部利用),所以想利用SDADC1、SDADC2、SDADC3的尽可能多的通道+DMA来实现。目前尝试着利用DMA2的channel3、4、5分别来存储SDADC1(3P、8P)、2(0P、1P)、3(7P、8P)三路的各自两个通道采集的电压,并分别在DMA三个通道的中断函数中将采集的电压通过串口打印。问题1:在增加SDADC_InjectedSynchroSDADC1(SDADC2,ENABLE);
& && && && && && &&&SDADC_InjectedSynchroSDADC1(SDADC3,ENABLE);
& && && &&&这两句代码后,最多只能打印出SDADC1、2两路或者SDADC1、3两路的各自4个通道的电压,不能实现6个通道全部打印。因为刚接触不久,了解有限,不清楚是否能够同时利用DMA实现三路SDADC的采集,希望大家能够给我这个菜鸟一点帮助?
问题2:由于后期需要对多路SDADC采集的数据处理,考虑在中断函数中只进行标志位的设置,在main函数中根据标志位分别将采集的电压打印,但是,采集电压打印代码在在中断函数中时,SDADC1、2两路四个通道的电压能够正常输出,但将代码移至main中,通过判断标志位来输出时,只能输出SDADC1两路通道的采集电压,这又是为什么呢?
代码如下:
/* Includes ------------------------------------------------------------------*/
#include &stm32f37x.h&
#include &stdio.h& //heìí¼ó
/* Private variables ---------------------------------------------------------*/
uint16_t flag=0;
uint32_t TimingDelay = 0;
/* Private define ------------------------------------------------------------*/
#define SDADC1_DR_Address& && && && & 0x&&// heìí¼ó& &SDADC1íaéèμÄ»ùμØÖ·(0x)¼óéÏSDADC data register for injected group (SDADC_JDATAR)μÄμØÖ·Æ«òÆ(0x60)¼ÆËãμÃμ½
#define SDADC2_DR_Address& && && && & 0x&&// heìí¼ó
#define SDADC3_DR_Address& && && && & 0x&&// heìí¼ó
/* Private typedef -------------------------------- heìí¼ó--------------*/
typedef struct{ uint16_t SDADC_InjectedConvData[6];} SDADC_ALLDATA;
typedef struct{ uint16_t SDADC1_InjectedConvData[2];
& && && && && & uint16_t SDADC2_InjectedConvData[2];
& && && && && & uint16_t SDADC3_InjectedConvData[2];} SDADC_EACHDATA;
typedef union{ SDADC_ALLDATA SDADC_AllD
& & & && && && && &&&SDADC_EACHDATA SDADC_EachD} SDADC_DATA;
SDADC_DATA SDADC_D
//he begin
#ifdef __GNUC__
&&#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
&&#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
&&USART_SendData(USART1, (uint8_t) ch);& & & & & & & && &//·¢Ëíò»×Ö½úêy¾Y
&&while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
&&{}& & & & & & & & & & & & & & & & //μè′y·¢Ëííê3é
void GPIO_Config(void)
& & & & GPIO_InitTypeDef& && &&&GPIO_InitS
&&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOE, ENABLE);
&&/* LEDS */
&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
&&GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&&GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
&&GPIO_Init(GPIOC, &GPIO_InitStructure);
//& & & & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
//&&GPIO_Init(GPIOC, &GPIO_InitStructure);
//&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
//&&GPIO_Init(GPIOA, &GPIO_InitStructure);
//& & & & GPIO_SetBits(GPIOA,GPIO_Pin_3);
he×¢êí
void SysTick_Handler(void)
&&if (TimingDelay != 0x00)
& & TimingDelay--;
void DDelay(__IO uint32_t nTime)
&&TimingDelay = nT
&&while(TimingDelay != 0);
uint32_t SDADC_Config(void) //heDT¸Ä
&&SDADC_AINStructTypeDef SDADC_AINS
&&GPIO_InitTypeDef GPIO_InitS
&&uint32_t SDADCTimeout = 0;
&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC1|RCC_APB2Periph_SDADC2|RCC_APB2Periph_SDADC3, ENABLE);//heDT¸Ä
&&SDADC_DeInit(SDADC1);
&&SDADC_DeInit(SDADC2); //heìí¼ó
&&SDADC_DeInit(SDADC3); //heìí¼ó
&&/* PWR APB1 interface clock enable */
&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
&&/* Enable SDADC analog interface */
&&PWR_SDADCAnalogCmd(PWR_SDADCAnalog_1|PWR_SDADCAnalog_2|PWR_SDADCAnalog_3, ENABLE);//heDT¸Ä
&&/* Set the SDADC divider: The SDADC should run @6MHz */
&&/* If Sysclk is 72MHz, SDADC divider should be 12 */
&&RCC_SDADCCLKConfig(RCC_SDADCCLK_SYSCLK_Div12);
&&/* GPIO Peripheral clock enable */
&&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE|RCC_AHBPeriph_GPIOB, ENABLE);&&//heDT¸Ä
&&/* SDADC1 channel 3P 8P pin configuration: PE7 PE8*/ /* SDADC2 channel 4P 3P pin configuration: PE11 PE12*/
&&GPIO_InitStructure.GPIO_Mode&&= GPIO_Mode_AN;
&&GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
&&//GPIO_InitStructure.GPIO_Pin& &= GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12; //heDT¸Ä
& & & & GPIO_InitStructure.GPIO_Pin& &= GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_14|GPIO_Pin_15; //heDT¸Ä
&&GPIO_Init(GPIOE, &GPIO_InitStructure);
& & & & /* SDADC3 channel 8P 7P pin configuration: PB14 PB15*/ //heìí¼ó
&&GPIO_InitStructure.GPIO_Mode&&= GPIO_Mode_AN;
&&GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
&&GPIO_Init(GPIOB, &GPIO_InitStructure);
&&/* Select External reference: The reference voltage selection is available
& &&&only in SDADC1 and therefore to select the VREF for SDADC2/SDADC3, SDADC1
& &&&clock must be already enabled */
&&SDADC_VREFSelect(SDADC_VREF_VDDA);
&&/* Insert delay equal to ~5 ms */
&&DDelay(5);
&&SDADC_Cmd(SDADC1, ENABLE);
& & & & SDADC_Cmd(SDADC2, ENABLE);&&//heìí¼ó
&&SDADC_Cmd(SDADC3, ENABLE);&&//heìí¼ó
&&SDADC_InitModeCmd(SDADC1, ENABLE);
& & & & SDADC_InitModeCmd(SDADC2, ENABLE);&&//heìí¼ó
& & & & SDADC_InitModeCmd(SDADC3, ENABLE);&&//heìí¼ó
&&SDADCTimeout = 30;
&&/* wait for INITRDY flag to be set */
&&while((SDADC_GetFlagStatus(SDADC1, SDADC_FLAG_INITRDY) == RESET) && ((SDADC_GetFlagStatus(SDADC2, SDADC_FLAG_INITRDY) == RESET))
& & & & & & & && && &&& ((SDADC_GetFlagStatus(SDADC3, SDADC_FLAG_INITRDY) == RESET)) && (--SDADCTimeout != 0));&&//heDT¸Ä
&&if(SDADCTimeout == 0)
& & /* INITRDY flag can not set */
& & return 1;
& & & & SDADC_AINStructure.SDADC_InputMode = SDADC_InputMode_SEO
&&SDADC_AINStructure.SDADC_Gain = SDADC_Gain_1_2;//GAIN is 0.5
&&SDADC_AINStructure.SDADC_CommonMode = SDADC_CommonMode_VSSA;
&&SDADC_AINStructure.SDADC_Offset = 0;
&&SDADC_AINInit(SDADC1, SDADC_Conf_0, &SDADC_AINStructure);
& & & & SDADC_AINInit(SDADC2, SDADC_Conf_0, &SDADC_AINStructure);&&//heìí¼ó
& & & & SDADC_AINInit(SDADC3, SDADC_Conf_0, &SDADC_AINStructure);&&//heìí¼ó
& & & & & & & &
&&SDADC_ChannelConfig(SDADC1, SDADC_Channel_3|SDADC_Channel_8, SDADC_Conf_0);&&//DT¸Ä
& & & & SDADC_ChannelConfig(SDADC2, SDADC_Channel_0|SDADC_Channel_1, SDADC_Conf_0);&&//heìí¼ó
& & & & SDADC_ChannelConfig(SDADC3, SDADC_Channel_7|SDADC_Channel_8, SDADC_Conf_0);&&//heìí¼ó
& & & & SDADC_InjectedChannelSelect(SDADC1,SDADC_Channel_3|SDADC_Channel_8);&&// heìí¼ó ±ØDëÕaÑù2Å¿éòÔ£¬·Ö¿aÅäÖÃμÄ»°£¬oóÃæÅäÖÃμÄí¨μà»á¸2¸ÇÇ°ÃæμÄ
& & & & SDADC_InjectedChannelSelect(SDADC2,SDADC_Channel_0|SDADC_Channel_1);&&//heìí¼ó
& & & & SDADC_InjectedChannelSelect(SDADC3,SDADC_Channel_7|SDADC_Channel_8);&&//heìí¼ó
& & & & SDADC_InjectedContinuousModeCmd(SDADC1,ENABLE);&&// heìí¼ó
& & & & SDADC_InjectedContinuousModeCmd(SDADC2,ENABLE);&&// heìí¼ó
& & & & SDADC_InjectedContinuousModeCmd(SDADC3,ENABLE);&&// heìí¼ó
& & & &&&/* Select an external trigger */
&&SDADC_ExternalTrigInjectedConvConfig(SDADC1, SDADC_ExternalTrigInjecConv_T19_CC2);& &// heDT¸Ä&&Trigger source for SDADC1
& & & & SDADC_ExternalTrigInjectedConvConfig(SDADC1, SDADC_ExternalTrigInjecConv_T19_CC3);& &// heìí¼ó&&Trigger source for SDADC2
& & & & SDADC_ExternalTrigInjectedConvConfig(SDADC1, SDADC_ExternalTrigInjecConv_T19_CC4);& &// heìí¼ó&&Trigger source for SDADC3
&&/* Select rising edge */
&&SDADC_ExternalTrigInjectedConvEdgeConfig(SDADC1, SDADC_ExternalTrigInjecConvEdge_Rising);&&// heìí¼ó
& & & & SDADC_ExternalTrigInjectedConvEdgeConfig(SDADC2, SDADC_ExternalTrigInjecConvEdge_Rising);&&// heìí¼ó
& & & & SDADC_ExternalTrigInjectedConvEdgeConfig(SDADC3, SDADC_ExternalTrigInjecConvEdge_Rising);&&// heìí¼ó
&&SDADC_DMAConfig(SDADC1,SDADC_DMATransfer_Injected,ENABLE);&&// heìí¼ó
& & & & SDADC_DMAConfig(SDADC2,SDADC_DMATransfer_Injected,ENABLE);&&// heìí¼ó
& & & & SDADC_DMAConfig(SDADC3,SDADC_DMATransfer_Injected,ENABLE);&&// heìí¼ó
& & & & SDADC_InjectedSynchroSDADC1(SDADC3,ENABLE);
& & & & SDADC_InjectedSynchroSDADC1(SDADC2,ENABLE);
&&SDADC_InitModeCmd(SDADC1, DISABLE);
& & & & SDADC_InitModeCmd(SDADC2, DISABLE); // heìí¼ó
& & & & SDADC_InitModeCmd(SDADC3, DISABLE); // heìí¼ó
&&/* configure calibration to be performed on conf0 */
&&SDADC_CalibrationSequenceConfig(SDADC1, SDADC_CalibrationSequence_1);
& & & & SDADC_CalibrationSequenceConfig(SDADC2, SDADC_CalibrationSequence_1);&&// heìí¼ó
& & & & SDADC_CalibrationSequenceConfig(SDADC3, SDADC_CalibrationSequence_1);&&// heìí¼ó
&&/* start PT100_SDADC Calibration */
&&SDADC_StartCalibration(SDADC1);
& & & & SDADC_StartCalibration(SDADC2);&&// heìí¼ó
&&SDADC_StartCalibration(SDADC3);&&// heìí¼ó
&&/* Set calibration timeout: 5.12 ms at 6 MHz in a single calibration sequence */
&&SDADCTimeout = 4*30720 ;
&&/* wait for PT100_SDADC Calibration process to end */
&&while((SDADC_GetFlagStatus(SDADC1, SDADC_FLAG_EOCAL) == RESET) && (SDADC_GetFlagStatus(SDADC2, SDADC_FLAG_EOCAL) == RESET)
& & & & & & & && && &&& (SDADC_GetFlagStatus(SDADC3, SDADC_FLAG_EOCAL) == RESET) && (--SDADCTimeout != 0));& && && && && && && && && && &&&//heDT¸Ä
&&if(SDADCTimeout == 0)
& & /* EOCAL flag can not set */
& & return 2;
&&/* SDADC successfully configured */
&&return 0;
//he ìí¼óDMAÅäÖÃoˉêy
void DMA_Config(void)& && && && &// heDT¸Ä
& & & & DMA_InitTypeDef& &DMA_InitS
& & & & NVIC_InitTypeDef NVIC_InitS
& & & & RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);
& & & & DMA_DeInit(DMA2_Channel3); //»Ö¸′ĬèÏÖ죬Õa¸öêDZØòaμÄ&&SDADC1
& & & & DMA_DeInit(DMA2_Channel4);&&// heìí¼ó&&SDADC2
& & & & DMA_DeInit(DMA2_Channel5);&&// heìí¼ó&&SDADC3
& & & & /* DMA2 channel3 configuration ----------------------------------------------*/
& & & & DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDADC1_DR_A
& & & & DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&(SDADC_Data.SDADC_EachData.SDADC1_InjectedConvData);& && && && &//DMAóëmemoryᬽóμıäá¿μÄμØÖ·£¬¶¨òå±äá¿
& & & & DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;& && && && && && && && && && && & //éèÖÃDMAμÄ′«êä·½Ïò£¬′Ë′|Îaμ¥Ïò′«ê䣻˫Ïò′«êä£oDMA_DIR_PeripheralDST
& & & & DMA_InitStructure.DMA_BufferSize = 2;& && &&&& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //éèÖÃDMAÔú′«êäê±»o3åÇøμÄ3¤¶è
& & & & DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_D&&& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //éèÖÃDMAμÄíaéèμYÔöģ꽣¬èôóD¶à¸öíaéèᬽó£¬ÔòDèòaê1óÃíaéèμYÔöģ꽣¬′Ë′|Ö»óëSDADC1½¨á¢áaÏμ
& & & & DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_E & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //DMA_MemoryInc_D DMA·ÃÎê¶à¸öÄú′æ2Îêyê±ê1óÃEnable,·ÃÎêò»¸öÄú′æ2Îêyê±ê1óÃDisable
& & & & DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfW& & & & & & & & & & & & & & & & & & & & //éèÖÃDMAÔú·ÃÎêê±Ã¿′Î2ù×÷μÄêy¾Y3¤¶è óD3ÖÖêy¾YààDí£oByte¡¢HalfWord¡¢word
& & & & DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfW& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //1¸öHalfwordÕ¼16λ
& & & & DMA_InitStructure.DMA_Mode = DMA_Mode_C&&& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //éèÖÃDMAμÄ′«êäģ꽣oá¬Dø2»¶ÏμÄÑ-»·Ä£ê½£¬èôÖ»Ïë·ÃÎêò»′λò°′Ö¸áî2ù×÷à′·ÃÎ꣬¿ééèÖÃ3éNormalÄ£ê½
& & & & DMA_InitStructure.DMA_Priority = DMA_Priority_H & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //éèÖÃDMAμÄóÅÏ輶±e VeryHigh,High,Medium,Low
& & & & DMA_InitStructure.DMA_M2M = DMA_M2M_D& && & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //éèÖÃDMAμÄ2¸ömemoryÖDμıäá¿»¥Ïà·ÃÎê
& & & & DMA_Init(DMA2_Channel3, &DMA_InitStructure);& & & & & & & &
& & & & /* DMA2 channel4 configuration --------------
heìí¼ó-----------------*/& &
& & & & DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDADC2_DR_A& &
&&DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&(SDADC_Data.SDADC_EachData.SDADC2_InjectedConvData);& && && && &//DMAóëmemoryᬽóμıäá¿μÄμØÖ·£¬¶¨òå±äá¿
& & & & DMA_Init(DMA2_Channel4, &DMA_InitStructure);& & & &
& & & & /* DMA2 channel5 configuration --------------- heìí¼ó--------------*/& &
& & & & DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDADC3_DR_A&&
&&DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&(SDADC_Data.SDADC_EachData.SDADC3_InjectedConvData);& && && && &//DMAóëmemoryᬽóμıäá¿μÄμØÖ·£¬¶¨òå±äá¿
& & & & DMA_Init(DMA2_Channel5, &DMA_InitStructure);
& & & & /* NVIC Configuration */&&// heìí¼ó
& & & & NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel3_IRQn;
& & & & NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
& & & & NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
& & & & NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& & & & NVIC_Init(&NVIC_InitStructure);
& & & & /* NVIC Configuration */&&// heìí¼ó
& & & & NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel4_IRQn;
& & & & NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
& & & & NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
& & & & NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& & & & NVIC_Init(&NVIC_InitStructure);
& & & & /* NVIC Configuration */&&// heìí¼ó
& & & & NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel5_IRQn;
& & & & NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
& & & & NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
& & & & NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& & & & NVIC_Init(&NVIC_InitStructure);
&&/* Enable DMA2 Channel3 Transfer half interrupt */
& & & & DMA_ITConfig(DMA2_Channel3, DMA_IT_HT, ENABLE); //heDT¸Ä
& & & & DMA_ITConfig(DMA2_Channel4, DMA_IT_HT, ENABLE); // heìí¼ó
& & & & DMA_ITConfig(DMA2_Channel5, DMA_IT_HT, ENABLE); // heìí¼ó
& & & & /* Enable DMA2 channel3/4/5 */
& & & & DMA_Cmd(DMA2_Channel3, ENABLE);
& & & & DMA_Cmd(DMA2_Channel4, ENABLE);
& & & & DMA_Cmd(DMA2_Channel5, ENABLE);
//he ìí¼ó′®¿úÅäÖÃoˉêy
void USART_Config(void)
&&USART_InitTypeDef USART_InitS
&&GPIO_InitTypeDef GPIO_InitS
& & & & NVIC_InitTypeDef NVIC_InitS
&&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA , ENABLE);&&
&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
&&/* Connect pin to Periph */
&&GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);& &
&&GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);
&&/* Configure pins as AF pushpull */
&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&&GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
&&GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
&&GPIO_Init(GPIOA, &GPIO_InitStructure);
&&/* USARTx configured as follow:
&&- BaudRate = 19200 baud&&
&&- Word Length = 8 Bits
&&- Stop Bit = 1 Stop Bit
&&- Parity = No Parity
&&- Hardware flow control disabled (RTS and CTS signals)
&&- Receive and transmit enabled
&&*/& & & & & & & &
&&NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
&&NVIC_Init(&NVIC_InitStructure);
& & & && &
&&USART_DeInit(USART1);
&&USART_InitStructure.USART_BaudRate = 19200;
&&USART_InitStructure.USART_WordLength = USART_WordLength_8b;
&&USART_InitStructure.USART_StopBits = USART_StopBits_1;
&&USART_InitStructure.USART_Parity = USART_Parity_No;
&&USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_N
&&USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
&&USART_Init(USART1, &USART_InitStructure);
& & /* USART enable */& & & &
&&USART_Cmd(USART1, ENABLE);
//he ìí¼ó¶¨ê±Æ÷ÅäÖÃoˉêy
void TIM19_Config(void)
&&TIM_TimeBaseInitTypeDef&&TIM_TimeBaseS
&&TIM_OCInitTypeDef& && &&&TIM_OCInitS
&&NVIC_InitTypeDef NVIC_InitS
&&/* Enable the TIM19 Interrupt for capture compare event */
&&NVIC_InitStructure.NVIC_IRQChannel = TIM19_IRQn;& && && && &//heDT¸Ä
&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
&&NVIC_Init(&NVIC_InitStructure);
&&/* Enable TIM19 clock */
&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM19, ENABLE);& &//heDT¸Ä
&&/* TIM19 Configuration */
&&TIM_DeInit(TIM19);& && &//heDT¸Ä
&&TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
&&/* Time base configuration */
&&TIM_TimeBaseStructure.TIM_Period = 900000;
&&TIM_TimeBaseStructure.TIM_Prescaler = 0;
&&TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
&&TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
&&TIM_TimeBaseInit(TIM19, &TIM_TimeBaseStructure);& && && & //heDT¸Ä
&&/* PWM Mode configuration: Channel2/3/4 */
&&TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
&&TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
&&TIM_OCInitStructure.TIM_Pulse = 4500 ;
&&TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H
&&TIM_OC2Init(TIM19, &TIM_OCInitStructure);& & //heDT¸Ä channel2 TIM19&&SDADC1
& & & & TIM_OC3Init(TIM19, &TIM_OCInitStructure);& &// heìí¼ó&&channel3&&SDADC2
& & & & TIM_OC4Init(TIM19, &TIM_OCInitStructure);& &// heìí¼ó&&channel4&&SDADC3
{& & & & & & & &
& & & & RCC_ClocksTypeDef RCC_C
& & & & /* SysTick end of count event each 1ms */
&&RCC_GetClocksFreq(&RCC_Clocks);
&&SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);
& & & & GPIO_Config();& & & &
& & & & USART_Config();& & & & //he ìí¼ó
& & & & DMA_Config();& &//he ìí¼ó
& & & & if(SDADC_Config() != 0)&&//he DT¸Ä
& & & & & & & & printf(&Fail to configure SigmaDelta Converter&);
& & while(1);
& & & & /* Configure TIM19 as trigger for SDADC conversion */
&&TIM19_Config();& && && && &&&//he DT¸Ä&&
&&TIM_Cmd(TIM19, ENABLE);& && &//he DT¸Ä
&&printf(&\r\n while begin.\n\r&);
& & & & while(1)
//& &&&if(flag==1)
//& & & & & & & & {
//& & & & & & & & & & & & flag=0;
//& & & & & & & & & & & & printf(&\r\n flag1..\n\r&);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & GPIO_ResetBits(GPIOC,GPIO_Pin_13);
//& & & & & & & & & & & &
//& && &if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0]=0;
//& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0];
//& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
//& & & & & & & & & & & & printf(&\r\n SDADC1[3P]E7--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0],t);
//& & & & & & & & & & & & if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1]=0;
//& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1];
//& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
//& & & & & & & & & & & & printf(&\r\n SDADC1[8P]E8--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1],t);
//& & & & & & & & & & & &
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & GPIO_SetBits(GPIOC,GPIO_Pin_13);
//& & & && &}
//& & & & & & & & else if(flag==2)
//& & & & & & & & {
//& & & && &&&flag=0;
//& && &printf(&\r\n flag2..\n\r&);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & GPIO_ResetBits(GPIOC,GPIO_Pin_13);
//& & & & & & & & & & & &
//& && &if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2]=0;
//& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2];
//& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
//& & & & & & & & & & & & printf(&\r\n SDADC2[0P]E15--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2],t);
//& & & & & & & & & & & & if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3]=0;
//& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3];
//& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
//& & & & & & & & & & & & printf(&\r\n SDADC2[1P]E14--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3],t);
//& & & & & & & & & & & &
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & GPIO_SetBits(GPIOC,GPIO_Pin_13);
//& & & && &}
//& & & & & & & & if(flag==3)
//& & & & & & & & {
//& & & & & & & & & & & & flag=0;
//& & & & & & & & & & & & printf(&\r\n flag3..\n\r&);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & GPIO_ResetBits(GPIOC,GPIO_Pin_13);
//& & & & & & & & & & & &
//& & & & & & & & & & & & if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4]=0;
//& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4];
//& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
//& & & & & & & & & & & & printf(&\r\n SDADC3[7P]B15--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4],t);
//& & & & & & & & & & & & if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5]=0;
//& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5];
//& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
//& & & & & & & & & & & & printf(&\r\n SDADC3[8P]B14--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5],t);
//& & & & & & & & & & & &
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & for(i=0;i&600000;i++);
//& & & & & & & & & & & & GPIO_SetBits(GPIOC,GPIO_Pin_13);
//& & & && &}
//he ìí¼ó& & & & DMA2 channel3 SDADC1ÖD¶Ï′|àíoˉêy
void DMA2_Channel3_IRQHandler(void)
//&&flag = 1;
//& & & & DMA_ClearFlag(DMA2_FLAG_HT3);
//& & & & printf(&\r\n DMA2-3 Interrupt.\n\r&);
& & & & if(DMA_GetFlagStatus(DMA2_FLAG_HT3) != RESET)& && && &
& & & & & & & & {
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & GPIO_ResetBits(GPIOC,GPIO_Pin_13);
& & & & & & & & & & & &
& && &if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0]=0;
& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0];
& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
& & & & & & & & & & & & printf(&\r\n SDADC1[3P]E7--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[0],t);
& & & & & & & & & & & & if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1]=0;
& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1];
& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
& & & & & & & & & & & & printf(&\r\n SDADC1[8P]E8--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[1],t);
& & & & & & & & & & & &
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & GPIO_SetBits(GPIOC,GPIO_Pin_13);
//he ìí¼ó DMA2 channel4 SDADC2ÖD¶Ï′|àíoˉêy
void DMA2_Channel4_IRQHandler(void)
//&&flag = 2;
//& & & & DMA_ClearFlag(DMA2_FLAG_HT3);
//& & & & printf(&\r\n DMA2-4 Interrupt.\n\r&);
& & & & if(DMA_GetFlagStatus(DMA2_FLAG_HT3) != RESET)& && && &
& & & & & & & & {
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & GPIO_ResetBits(GPIOC,GPIO_Pin_13);
& & & & & & & & & & & &
& && &if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2]=0;
& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2];
& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
& & & & & & & & & & & & printf(&\r\n SDADC2[0P]E15--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[2],t);
& & & & & & & & & & & & if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3]=0;
& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3];
& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
& & & & & & & & & & & & printf(&\r\n SDADC2[1P]E14--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[3],t);
& & & & & & & & & & & &
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & GPIO_SetBits(GPIOC,GPIO_Pin_13);
//he ìí¼ó DMA2 channel5 SDADC3ÖD¶Ï′|àíoˉêy
& & & & void DMA2_Channel5_IRQHandler(void)
//&&flag = 3;
//& & & & DMA_ClearFlag(DMA2_FLAG_HT3);
//& & & & printf(&\r\n DMA2-5 Interrupt.\n\r&);
& & & & if(DMA_GetFlagStatus(DMA2_FLAG_HT3) != RESET)& && && &
& & & & & & & & {
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & GPIO_ResetBits(GPIOC,GPIO_Pin_13);
& & & & & & & & & & & &
& && &if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4]=0;
& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4];
& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
& & & & & & & & & & & & printf(&\r\n SDADC3[7P]:PB15--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[4],t);
& & & & & & & & & & & & if(SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5]&0)SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5]=0;
& & & & & & & & & & & & t=SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5];
& & & & & & & & & & & & t=t*/65536;//GAIN is 0.5
& & & & & & & & & & & & printf(&\r\n SDADC3[8P]:PB14--Voltage:0x%x.&&%fV.\n\r&,SDADC_Data.SDADC_AllData.SDADC_InjectedConvData[5],t);
& & & & & & & & & & & &
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & for(i=0;i&600000;i++);
& & & & & & & & & & & & GPIO_SetBits(GPIOC,GPIO_Pin_13);
& & & & & & & & }
主题帖子精华
中级会员, 积分 210, 距离下一级还需 290 积分
在线时间48 小时
主题帖子精华
初级会员, 积分 168, 距离下一级还需 32 积分
在线时间38 小时
能发下373的工程吗
Powered by}

我要回帖

更多关于 苏F 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信