完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先感谢JW的建议。
该项目合并了两个单独工作的独立 STM32Cubemx 项目。一个(USB 写入应用程序)和一个(ADC + DMA + 定时器 1 应用程序)。我将我认为必要的所有代码从(ADC + DMA + Timer 1 应用程序)复制并粘贴到(USB 应用程序)。 我使用调试器单步执行代码,同时观察 ADC1 和定时器 1 的内存值。记忆中没有任何变化。我在原始 ADC + DMA + Timer 1 项目中做了同样的事情,并注意到内存值在从文件 stm32f7xx_hal_msp.c 调用的 void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) 函数中正确更新。 我比较了两个项目的 stm32f7xx_hal_msp.c 文件,发现我缺少下面显示的代码: 外部 DMA_HandleTypeDef hdma_adc1; void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { GPIO_InitTypeDef GPIO_InitStruct = {0}; 如果(hadc->实例==ADC1) { /* 用户代码开始 ADC1_MspInit 0 */ /* 用户代码结束 ADC1_MspInit 0 */ /* 外设时钟使能 */ __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**ADC1 GPIO 配置 PA0/WKUP ------> ADC1_IN0 PA1 ------> ADC1_IN1 PA2 ------> ADC1_IN2 PA3 ------> ADC1_IN3 PA4 ------> ADC1_IN4 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* ADC1 DMA 初始化 */ /* ADC1 初始化 */ hdma_adc1.Instance = DMA2_Stream0; hdma_adc1.Init.Channel = DMA_CHANNEL_0; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; 如果(HAL_DMA_Init(&hdma_adc1)!= HAL_OK) { 错误处理程序(); } __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1); /* ADC1 中断初始化 */ HAL_NVIC_SetPriority(ADC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(ADC_IRQn); /* 用户代码开始 ADC1_MspInit 1 */ /* 用户代码结束 ADC1_MspInit 1 */ } } /** * @brief ADC MSP 去初始化 * 此函数冻结本例中使用的硬件资源 * @param hadc: ADC句柄指针 * @retval 无 */ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) { 如果(hadc->实例==ADC1) { /* 用户代码开始 ADC1_MspDeInit 0 */ /* 用户代码结束 ADC1_MspDeInit 0 */ /* 外围时钟禁用 */ __HAL_RCC_ADC1_CLK_DISABLE(); /**ADC1 GPIO 配置 PA0/WKUP ------> ADC1_IN0 PA1 ------> ADC1_IN1 PA2 ------> ADC1_IN2 PA3 ------> ADC1_IN3 PA4 ------> ADC1_IN4 */ HAL_GPIO_DeInit(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4); /* ADC1 DMA 初始化 */ HAL_DMA_DeInit(hadc->DMA_Handle); /* ADC1 中断 DeInit */ HAL_NVIC_DisableIRQ(ADC_IRQn); /* 用户代码开始 ADC1_MspDeInit 1 */ /* 用户代码结束 ADC1_MspDeInit 1 */ } } /** * @brief TIM_Base MSP 初始化 * 该函数配置本例中使用的硬件资源 * @param htim_base: TIM_Base 句柄指针 * @retval 无 */ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { 如果(htim_base->Instance==TIM1) { /* 用户代码开始 TIM1_MspInit 0 */ /* 用户代码结束 TIM1_MspInit 0 */ /* 外设时钟使能 */ __HAL_RCC_TIM1_CLK_ENABLE(); /* 用户代码开始 TIM1_MspInit 1 */ /* 用户代码结束 TIM1_MspInit 1 */ } } /** * @brief TIM_Base MSP 去初始化 * 此函数冻结本例中使用的硬件资源 * @param htim_base: TIM_Base 句柄指针 * @retval 无 */ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) { 如果(htim_base->Instance==TIM1) { /* 用户代码开始 TIM1_MspDeInit 0 */ /* 用户代码结束 TIM1_MspDeInit 0 */ /* 外围时钟禁用 */ __HAL_RCC_TIM1_CLK_DISABLE(); /* 用户代码开始 TIM1_MspDeInit 1 */ /* 用户代码结束 TIM1_MspDeInit 1 */ } } |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2788 浏览 1 评论
3252 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1827 浏览 1 评论
3672 浏览 6 评论
6069 浏览 21 评论
1352浏览 4评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
374浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
470浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
294浏览 2评论
使用STM32F407VET6的USB2.0功能,发现ctl后芯片无数据返回,是什么原因可能导致的呢?
218浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 17:44 , Processed in 1.205279 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号