头像-151446

黄莨元

  • 广西壮族自治区桂林市
  • 单片机 嵌入式 DSP FPGA/CPLD EDA/PCB 模拟技术 传感器/MEMS
  • 医疗电子

个人成就

获得 60 次赞

帮助过119人

原理图

这是啥意思

嵌入式开发

嵌入式,给点学习建议和指导,谢谢

有人玩过半导体制冷片制作小冰箱吗

想用半导体制冷片制作小冰箱,需要用到大功率电源,半导体制冷片,还有散热系统,单片机控制系统,能调温度,还能显示温度,具体的思路已经有了,想问问你们有没好点的意见,能尽量提高点效率还有温度调节的精度

心电脉搏信号的处理

人体的心电信号和脉搏波信号都是微弱小信号,如何对这些信号进行采集和处理会有好的效果?谢谢回答

ADC和DMA使用,调用下面这函数死机了。

想用ADC采集,采集的结果通过DMA传输,在主函数中调用下面这两个函数,然后就死机了,没有使用DMA中断,能帮看看配置出了啥问题吗,谢谢,单片机是STM32F412#include "adc.h" #include "main.h" ADC_HandleTypeDef ADC1_Handler; //ADC¾ä±ú DMA_HandleTypeDef ADC1TxDMA_Handler; //DMA¾ä±ú //ch: ADC_channels //ͨµÀÖµ 0~16È¡Öµ·¶Î§Îª£ºADC_CHANNEL_0~ADC_CHANNEL_16 void MY_ADC_Init(void) { ADC1_Handler.Instance=ADC1; ADC1_Handler.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; //4·ÖƵ ADCʱÖÓΪ25M ADC1_Handler.Init.Resolution = ADC_RESOLUTION_12B; //12λģʽ ADC1_Handler.Init.DataAlign = ADC_DATAALIGN_RIGHT; //ÓÒ¶ÔÆë ADC1_Handler.Init.ScanConvMode = DISABLE; //·ÇɨÃèģʽ ADC1_Handler.Init.EOCSelection = DISABLE; //¹Ø±ÕEOCÖÐ¶Ï ADC1_Handler.Init.ContinuousConvMode = ENABLE; //¹Ø±ÕÁ¬Ðøת»» ADC1_Handler.Init.NbrOfConversion = 1; //1¸öת»»ÔÚ¹æÔòÐòÁÐÖÐ Ò²¾ÍÊÇֻת»»¹æÔòÐòÁÐ1 ADC1_Handler.Init.DiscontinuousConvMode = DISABLE; //½ûÖ¹²»Á¬Ðø²ÉÑùģʽ ADC1_Handler.Init.NbrOfDiscConversion = 0; //²»Á¬Ðø²ÉÑùͨµÀÊýΪ0 ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START; //Èí¼þ´¥·¢ ADC1_Handler.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;//ÎÞÍⲿ´¥·¢×ª»» ADC1_Handler.Init.DMAContinuousRequests = ENABLE; //¹Ø±ÕDMAÇëÇó ADC1_Handler.Init.EOCSelection = DISABLE; HAL_ADC_Init(&ADC1_Handler); //³õʼ»¯ } //ADCµ×²ãÇý¶¯£¬Òý½ÅÅäÖã¬Ê±ÖÓʹÄÜ //´Ëº¯Êý»á±»HAL_ADC_Init()µ÷Óà //hadc:ADC¾ä±ú void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_ADC1_CLK_ENABLE(); //ʹÄÜADC1ʱÖÓ __HAL_RCC_GPIOC_CLK_ENABLE(); //¿ªÆôGPIOCʱÖÓ GPIO_Initure.Pin = GPIO_PIN_0; //PC0 GPIO_Initure.Mode = GPIO_MODE_ANALOG; //Ä£Äâ GPIO_Initure.Pull = GPIO_NOPULL; //²»´øÉÏÏÂÀ­ HAL_GPIO_Init(GPIOC,&GPIO_Initure); } void MY_DMA_Config(void) { __HAL_RCC_DMA2_CLK_ENABLE(); //DMA2ʱÖÓʹÄÜ __HAL_LINKDMA(&ADC1_Handler,DMA_Handle,ADC1TxDMA_Handler); //½«DMAÓëADC1ÁªÏµÆðÀ´(·¢ËÍDMA) ADC1TxDMA_Handler.Instance = DMA2_Stream0; //Êý¾ÝÁ÷Ñ¡Ôñ ADC1TxDMA_Handler.Init.Channel = DMA_CHANNEL_0; //ͨµÀÑ¡Ôñ ADC1TxDMA_Handler.Init.Direction = DMA_PERIPH_TO_MEMORY; //ÍâÉèµ½´¢´æÆ÷ ADC1TxDMA_Handler.Init.PeriphInc = DMA_PINC_DISABLE; //ÍâÉè·ÇÔöÁ¿Ä£Ê½ ADC1TxDMA_Handler.Init.MemInc = DMA_MINC_DISABLE; //´æ´¢Æ÷ÔöÁ¿Ä£Ê½ ADC1TxDMA_Handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; //ÍâÉèÊý¾Ý³¤¶È:16λ ADC1TxDMA_Handler.Init.MemDataAlignment = DMA_PDATAALIGN_HALFWORD; //´æ´¢Æ÷Êý¾Ý³¤¶È:16λ ADC1TxDMA_Handler.Init.Mode = DMA_CIRCULAR; //Ñ­»·Ä£Ê½ ADC1TxDMA_Handler.Init.Priority = DMA_PRIORITY_MEDIUM; //¸ßÓÅÏȼ¶ ADC1TxDMA_Handler.Init.FIFOMode = DMA_FIFOMODE_DISABLE; ADC1TxDMA_Handler.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL; ADC1TxDMA_Handler.Init.MemBurst = DMA_MBURST_SINGLE; //´æ´¢Æ÷Í»·¢µ¥´Î´«Êä ADC1TxDMA_Handler.Init.PeriphBurst = DMA_PBURST_SINGLE; //ÍâÉèÍ»·¢µ¥´Î´« // HAL_DMA_DeInit(&ADC1TxDMA_Handler); HAL_DMA_Init(&ADC1TxDMA_Handler); }