完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前使用的是STM32,单位采购替换了贵公司的CH32F103R8T6,使用HAL库配置DAC_CH2和DMA circle模式,如何正确修改?
原来的程序如下: 主函数中语句 HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_2,DAC1_Value,1,DAC_ALIGN_12B_R); dac.c中语句 void MX_DAC_Init(void) { DAC_ChannelConfTypeDef sConfig = {0}; hdac.Instance = DAC; if (HAL_DAC_Init(&hdac) != HAL_OK) { Error_Handler(); } sConfig.DAC_Trigger = DAC_TRIGGER_NONE; sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE; if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_2) != HAL_OK) { Error_Handler(); } } void HAL_DAC_MspInit(DAC_HandleTypeDef* dacHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(dacHandle->Instance==DAC) { __HAL_RCC_DAC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = DAC_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(DAC_GPIO_Port, &GPIO_InitStruct); hdma_dac_ch2.Instance = DMA2_Channel4; hdma_dac_ch2.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_dac_ch2.Init.PeriphInc = DMA_PINC_DISABLE; hdma_dac_ch2.Init.MemInc = DMA_MINC_ENABLE; hdma_dac_ch2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_dac_ch2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_dac_ch2.Init.Mode = DMA_CIRCULAR; hdma_dac_ch2.Init.Priority = DMA_PRIORITY_LOW; if (HAL_DMA_Init(&hdma_dac_ch2) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(dacHandle,DMA_Handle2,hdma_dac_ch2); } } 尝试将DMA2_Channel4修改为DMA1_Channel4,无输出;不使用DMA可以正常输出 |
|
相关推荐
2个回答
|
|
您好,关于DAC和DMA的问题,主要区别在于CH32F103只有一个DMA,其中DAC-CH2输出对应PA5引脚,对应DMA通道为DMA1通道4,在使用DMA的时候,注意要使能DMA时钟,在你附的代码中没有看到DMA时钟的使能,你可以检查一下代码中是否有遗漏。
|
|
|
|
void MX_DMA_Init(void)
{ /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); // __HAL_RCC_DMA2_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Channel1_IRQn interrupt configuration */ // HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); // HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); // /* DMA1_Channel2_IRQn interrupt configuration */ // HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0); // HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn); // /* DMA1_Channel3_IRQn interrupt configuration */ // HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0); // HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn); // /* DMA1_Channel6_IRQn interrupt configuration */ // HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0); // HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn); // /* DMA2_Channel4_5_IRQn interrupt configuration */ // HAL_NVIC_SetPriority(DMA2_Channel4_5_IRQn, 0, 0); // HAL_NVIC_EnableIRQ(DMA2_Channel4_5_IRQn); } DMA时钟使能了 |
|
|
|
只有小组成员才能发言,加入小组>>
521 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2902 浏览 2 评论
2398 浏览 1 评论
867浏览 2评论
687浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
417浏览 1评论
522浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
812浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:44 , Processed in 1.384291 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号