完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
使用库文件的Demo程序,配合ST官方Demo板,
下载库文件的Demo程序,发送使用DMA时,DAC没有输出, 反复修改, 最后将两个DAC都配置成Stream5 Chanel7 两个通道都正常输出, 但是数据手册了上DAC2应该是Sream6 Channel7, 根据手册配置的话 DAC1和DAC2 都没有输出 这是怎么回事, 下边是我的源程序 /** ****************************************************************************** * @file DAC_SignalsGeneration/main.c * @author MCD Application Team * @version V1.0.0 * @date 19-September-2011 * @brief Main program body. ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "STM32f4_discovery.h" /** @addtogroup STM32F4_Discovery_Peripheral_Examples * @{ */ /** @addtogroup DAC_SignalsGeneration * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define DAC_DHR12R2_ADDRESS 0x40007414 #define DAC_DHR8R1_ADDRESS 0x40007410 /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ DAC_InitTypeDef DAC_InitStructure; const uint16_t Sine12bit[32] = { 2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909, 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647}; const uint8_t Escalator8bit[6] = {0x0,0X11,0X22,0X33,0X44,0xFF}; __IO uint8_t SelectedWavesForm = 1; __IO uint8_t KeyPressed = SET; /* Private function prototypes -----------------------------------------------*/ void TIM6_Config(void); void DAC_Ch1_EscalatorConfig(void); void DAC_Ch2_SineWaveConfig(void); void DAC_Ch1_NoiseConfig(void); void DAC_Ch2_TriangleConfig(void); /* Private functions ---------------------------------------------------------*/ /** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f4xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f4xx.c file */ /* Preconfiguration before using DAC----------------------------------------*/ GPIO_InitTypeDef GPIO_InitStructure; /* DMA1 clock and GPIOA clock enable (to be used with DAC) */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1 | RCC_AHB1Periph_GPIOA, ENABLE); /* DAC Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); /* DAC channel 1 2 (DAC_OUT1 = PA.4)(DAC_OUT2 = PA.5) configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, GPIO_InitStructure); /* TIM6 Configuration ------------------------------------------------------*/ TIM6_Config(); /* Configures User Button */ STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI); DAC_Ch1_EscalatorConfig(); /* Sine Wave generator -----------------------------------------------*/ DAC_Ch2_SineWaveConfig(); while (1) { /* If the User Button is pressed */ if (KeyPressed == RESET) { DAC_DeInit(); } /* select waves forms according to the Key Button status */ if (SelectedWavesForm == 1) //SelectedWavesForm 已经设置成1 { /* The sine wave and the escalator wave has been selected */ // DAC_Ch1_EscalatorConfig(); ==========注释掉这部分,移动到while (1)前 /* Escalator Wave generator ------------------------------------------*/ // DAC_Ch2_SineWaveConfig();==========注释掉这部分,移动到while (1)前 } else { /* The triangle wave and the noise wave has been selected */ /* Noise Wave generator ----------------------------------------------*/ //DAC_Ch1_NoiseConfig(); /* Triangle Wave generator -------------------------------------------*/ DAC_Ch2_TriangleConfig(); } KeyPressed = SET; } } /** * @brief TIM6 Configuration * @note TIM6 configuration is based on CPU @168MHz and APB1 @42MHz * @note TIM6 Update event occurs each 37.5MHz/256 = 16.406 KHz * @param None * @retval None */ void TIM6_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /* TIM6 Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); /* Time base configuration */ TIM_TimeBaseStructInit( TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 0xFF; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM6, TIM_TimeBaseStructure); /* TIM6 TRGO selection */ TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); /* TIM6 enable counter */ TIM_Cmd(TIM6, ENABLE); } /** * @brief DAC Channel2 SineWave Configuration * @param None * @retval None */ void DAC_Ch2_SineWaveConfig(void) { DMA_InitTypeDef DMA_InitStructure; /* DAC channel2 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_2, DAC_InitStructure); //这部分注释应该有问题,手册上DAC2对应Stream6 Channel7 /* DMA1_Stream5 channel7 configuration **************************************/ DMA_DeInit(DMA1_Stream5); DMA_InitStructure.DMA_Channel = DMA_Channel_7; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R2_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) Sine12bit; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_BufferSize = 32; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; 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_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA1_Stream5, DMA_InitStructure); /* Enable DMA1_Stream5 */ DMA_Cmd(DMA1_Stream5, ENABLE); /* Enable DAC Channel2 */ DAC_Cmd(DAC_Channel_2, ENABLE); /* Enable DMA for DAC Channel2 */ DAC_DMACmd(DAC_Channel_2, ENABLE); } /** * @brief DAC Channel1 Escalator Configuration * @param None * @retval None */ void DAC_Ch1_EscalatorConfig(void) { DMA_InitTypeDef DMA_InitStructure; /* DAC channel1 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_1, DAC_InitStructure); //这部分注释应该有问题,手册上DAC2对应Stream5 Channel7 /* DMA1_Stream6 channel7 configuration **************************************/ DMA_DeInit(DMA1_Stream5); DMA_InitStructure.DMA_Channel = DMA_Channel_7; DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) Escalator8bit; DMA_InitStructure.DMA_BufferSize = 6; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA1_Stream6, DMA_InitStructure); /* Enable DMA1_Stream6 */ DMA_Cmd(DMA1_Stream6, ENABLE); /* Enable DAC Channel1 */ DAC_Cmd(DAC_Channel_1, ENABLE); /* Enable DMA for DAC Channel1 */ DAC_DMACmd(DAC_Channel_1, ENABLE); } /** * @brief DAC Channel2 Triangle Configuration * @param None * @retval None */ void DAC_Ch2_TriangleConfig(void) { /* DAC channel2 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle; DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_1023; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_2, DAC_InitStructure); /* Enable DAC Channel2 */ DAC_Cmd(DAC_Channel_2, ENABLE); /* Set DAC channel2 DHR12RD register */ DAC_SetChannel2Data(DAC_Align_12b_R, 0x100); } /** * @brief DAC Channel1 Noise Configuration * @param None * @retval None */ void DAC_Ch1_NoiseConfig(void) { /* DAC channel1 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Noise; DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits10_0; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_1, DAC_InitStructure); /* Enable DAC Channel1 */ DAC_Cmd(DAC_Channel_1, ENABLE); /* Set DAC Channel1 DHR12L register */ DAC_SetChannel1Data(DAC_Align_12b_L, 0x7FF0); } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %drn", file, line) */ /* Infinite loop */ while (1) { } } #endif /** * @} */ /** * @} */ /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ |
|
相关推荐
1个回答
|
|
|
首先,我们需要了解STM32F407的DMA(直接内存访问)和DAC(数字模拟转换器)的基本概念。DMA是一种硬件特性,允许外设直接与内存通信,而无需CPU干预。这可以提高系统性能并减轻CPU负担。DAC是一种将数字信号转换为模拟信号的设备。
在您的问题中,您提到了使用ST官方Demo板和库文件Demo程序,但DAC没有输出。您还提到了将两个DAC配置为Stream5 Channel7后,两个通道都正常输出。但是,根据数据手册,DAC2应该是Stream6 Channel7。当您根据手册配置时,DAC1和DAC2都没有输出。 为了解决这个问题,我们需要逐步检查以下几个方面: 1. 确保您的硬件连接正确,包括STM32F407与DAC之间的连接。 2. 检查您的库文件Demo程序是否正确配置了DMA和DAC。这包括检查初始化代码、DMA通道配置、DAC通道配置等。 3. 确保您的程序中没有逻辑错误,例如错误的数据传输或错误的DMA配置。 4. 检查您的STM32F407固件库版本是否与ST官方Demo板兼容。如果不兼容,您可能需要更新固件库或修改Demo程序以适应您的硬件。 5. 如果您仍然遇到问题,您可以尝试使用ST官方提供的示例代码,这些代码通常已经经过测试并适用于特定的硬件配置。 6. 如果问题仍然存在,您可能需要联系ST技术支持以获取更多帮助。 请注意,由于您提供的代码片段不完整,我们无法直接分析您的具体问题。但是,以上建议应该可以帮助您找到问题的根源并解决它。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4130 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3221 浏览 1 评论
2747 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2175 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14939 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3084浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1892浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2064浏览 3评论
1976浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2165浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:59 , Processed in 0.694295 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1935