sunlite 发表于 2015-1-29 18:26:17

CubeF1 ADC DMA的DMA1_Channel1_IRQHandler如果用while(1)等待则无法触发

本帖最后由 sunlite 于 2015-1-29 18:26 编辑

代码直接用CubeMX生成的,
ADC1_Channel1 的5通道采样, DMA传输,在main的主循环里用HAL_ADC_Start_DMA() 开始ADC采样。

main.c:
volatile uint8_t DMATC;

   
while (1) {
            DMATC = 0;    //在DMA1_Channel1_IRQHandler会把这个值更新为1
   HAL_ADC_Start_DMA(&hadc1, (uint32_t *) adcValues, 5);
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
   while(DMATC == 0)       //这里如果用while去等待DMATC更新为1,则DMA1_Channel1_IRQHandler 永远不会被执行
                                          // 用示波器看PB14脚永远是高电平的,
                                          // 如果去掉这段while等待,那么DMA1_Channel1_IRQHandler就会被执行,DMATC也会被更新为1,
    {
                ;
    }
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
    }stm32f1xx_it.c:
/**
* @brief This function handles DMA1 channel1 global interrupt.
*/
void DMA1_Channel1_IRQHandler(void)
{
    /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */

    /* USER CODE END DMA1_Channel1_IRQn 0 */
    HAL_DMA_IRQHandler(&hdma_adc1);
    /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
    DMATC = 1;    //
    /* USER CODE END DMA1_Channel1_IRQn 1 */
}项目文件打包,用的是TrueStudio lite. 不知道这到底是什么问题,俺刚刚开始折腾stm32, 摸cube之前只碰过一周的StdPeriphral库,也许犯了初学者常见的问题,还望各位不吝赐教。

多谢


宛仔 发表于 2015-1-29 19:04:12

手里没有F1的板子帮不了你,帮顶

黄小狼 发表于 2015-1-29 22:11:42

stm32cube_fw_f1_v100.zip有没有下载地址

sunlite 发表于 2015-1-29 22:12:42

黄小狼 发表于 2015-1-29 22:11
stm32cube_fw_f1_v100.zip有没有下载地址

不需要自己找下载地址,直接用cubeMX去更新就行了

黄小狼 发表于 2015-1-29 23:02:13

sunlite 发表于 2015-1-29 22:12
不需要自己找下载地址,直接用cubeMX去更新就行了

更新不动呀,很慢,你把你的压缩包给一个好不?
页: [1]
查看完整版本: CubeF1 ADC DMA的DMA1_Channel1_IRQHandler如果用while(1)等待则无法触发