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库,也许犯了初学者常见的问题,还望各位不吝赐教。
多谢
手里没有F1的板子帮不了你,帮顶 stm32cube_fw_f1_v100.zip有没有下载地址 黄小狼 发表于 2015-1-29 22:11
stm32cube_fw_f1_v100.zip有没有下载地址
不需要自己找下载地址,直接用cubeMX去更新就行了 sunlite 发表于 2015-1-29 22:12
不需要自己找下载地址,直接用cubeMX去更新就行了
更新不动呀,很慢,你把你的压缩包给一个好不?
页:
[1]