adc 使用教程6-外部中断线11触发adc0

使用外部中断线11 触发ADC开始采集数据,PA11 gpio

1.初始化时钟和定义全局变量

/*保存ADC值*/
uint32_t adc_value[4];
/*dma传输结束*/
uint32_t dma_finish;
//   使能各种时钟和adc时钟分频输入
void rcu_config_adc(void)
{/*使能GPIO时钟 */rcu_periph_clock_enable(RCU_GPIOA);/* 使能ADC时钟*/rcu_periph_clock_enable(RCU_ADC0);rcu_periph_clock_enable(RCU_ADC1);  /* enable DMA0 clock ADC 对应的DMA 就是DMA0*/rcu_periph_clock_enable(RCU_DMA0);/* 配置ADC时钟 ,ADC最大14MHz*/rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
}

2.配置gpio

/*配置gpio
*/
void gpio_config_adc(void)
{/*配置gpio为模拟输入模式 */gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_2|GPIO_PIN_3);/*配置gpio下拉输入-用于中断*/gpio_init(GPIOA, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, GPIO_PIN_11);}

3.配置中断

void exit_init(void)
{/*使能复用功能时钟 */rcu_periph_clock_enable(RCU_AF);//设置指定中断线的优先级nvic_irq_enable(EXTI10_15_IRQn, 2U, 2U);/* 设置中断线引脚*/gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_11);/* 设置中断线和中断边沿 */exti_init(EXTI_11, EXTI_INTERRUPT, EXTI_TRIG_RISING);//清除中断标记exti_interrupt_flag_clear(EXTI_11);
}

4.实现中断服务函数-new

/*外部中断10-15的中断服务函数*/
void EXTI10_15_IRQHandler(void)
{//判定是否是外部中断线0if (RESET != exti_interrupt_flag_get(EXTI_11)) {LED0=!LED0;//清除中断标志exti_interrupt_flag_clear(EXTI_11);}}

5.dma配置

/*!
dma配置
*/
void dma_config(void)
{/* ADC_DMA_channel configuration */dma_parameter_struct dma_data_parameter;/* 复位dma 通道0  */dma_deinit(DMA0, DMA_CH0);/* initialize DMA data mode */dma_data_parameter.periph_addr  = (uint32_t)(&ADC_RDATA(ADC0));//配置外设寄存器为adc的规则数据寄存器dma_data_parameter.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;//外设寄存器地址不增加dma_data_parameter.memory_addr  = (uint32_t)(&adc_value);//存放数据的内存地址dma_data_parameter.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;//存放数据的内存地址自增dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_32BIT;//外设数据宽度32位 adc1[16-31]adc0[0-15]dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_32BIT;  //内存数据宽度32位dma_data_parameter.direction    = DMA_PERIPHERAL_TO_MEMORY;//数据传输方式是外设到内存dma_data_parameter.number       = 2;//dma传输数量dma_data_parameter.priority     = DMA_PRIORITY_HIGH;//dma优先级高dma_init(DMA0, DMA_CH0, &dma_data_parameter);//循环模式开启dma_circulation_enable(DMA0, DMA_CH0);//中断管理器开启通道4中断nvic_irq_enable(DMA0_Channel0_IRQn, 0, 1); /* dam 转换结束产生中断*/dma_interrupt_enable(DMA0, DMA_CH0, DMA_INT_FTF);/* 使能dma通道0*/dma_channel_enable(DMA0, DMA_CH0);
}

6.dma中断处理函数

/*dma中断处理函数
*/
void DMA0_Channel0_IRQHandler(void)
{if(dma_interrupt_flag_get(DMA0, DMA_CH0, DMA_INT_FLAG_FTF)){  //清除dma中断标记dma_interrupt_flag_clear(DMA0, DMA_CH0, DMA_INT_FLAG_G);dma_finish = SET;}
}

7.ADC配置

void adc_config(void)
{/* reset ADC */adc_deinit(ADC0);adc_deinit(ADC1);/* ADC mode config 工作在规则并行模式 */adc_mode_config(ADC_MODE_FREE); /* ADC continous function enable */adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); //adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);   /* 右对齐*/adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);//adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);  /* 配置规则通道数量 */adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);// adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 2);/* ADC规则模式配置;2个adc并行模式下,不可以2个adc同时采集一个通道,adc1数据放在高16位,adc0数据放在低16位*/adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);// adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);//adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);/* adc 使用TIM1 的CH1 的上升沿触发*/adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_EXTI_11);/*软件出发*///adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_T2_TRGO); /* adc触发使能*/adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);// adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);    /* 使能定时器*/adc_enable(ADC0);delay_1ms(1U);/* 标定复位ADC */adc_calibration_enable(ADC0);/* 使能定时器*/
//    adc_enable(ADC1);
//    delay_1ms(1U);
//    /* 标定复位ADC */
//    adc_calibration_enable(ADC1);  /* ADC DMA 使能*/adc_dma_mode_enable(ADC0);
}

8.测试函数

void adc_test()
{/* 时钟初始化 */rcu_config_adc();/* GPIO 配置 */gpio_config_adc();/* DMA 配置 */dma_config();  /* ADC 配置 */adc_config();/* 配置外部中断 */exit_init();uint16_t *pdata =(uint16_t *)adc_value; while(1){delay_1ms(5);if(dma_finish){dma_finish=0;printf("%d %d %d %d \r\n",pdata[0],pdata[1],pdata[2],pdata[3]);}}}

19. GD32F103C8T6入门教程-adc使用教程6-外部中断线11触发adc0相关推荐

  1. 17. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据++dma中断通知

    adc 使用教程3-dma方式采集数据+dma中断通知 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 1. ...

  2. 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据

    adc 使用教程2-dma+连续扫描方式采集数据 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 1.时钟配 ...

  3. 20. GD32F103C8T6入门教程-adc使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组

    adc 使用教程6-使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组 ADC支持18个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道 规则组,可以按照特定的序列 ...

  4. 18. GD32F103C8T6入门教程-adc-使用教程5-定时器TIM2更新事件触发adc0

    adc 使用教程5-定时器TIM2更新事件触发adc0 但是本实验出现了一个异常,单片机大概路出现更新事件没有启动ADC转换,可是没有找到处理办法,但是定时器的是正常工作LED灯闪烁 1.使能各种时钟 ...

  5. C#游戏开发快速入门教程Unity5.5教程

    C#游戏开发快速入门教程Unity5.5教程 试读文档下载地址:http://pan.baidu.com/s/1slwBHoD C#是微软发布的高级程序设计语言,这门语言和C语言一样,已经成为了大学计 ...

  6. python自学视频教程 38-python编程开发入门中文视频培训教程38讲

    Python 当前位置:主页 > 编程教程 > Python > python编程开发入门中文视频培训教程38讲 python编程开发入门中文视频培训教程38讲 教程大小:   发布 ...

  7. altium designer 入门视频教程 制作pcb教程视频

    altium designer 入门视频教程 制作pcb教程视频 本套altium designer视频针对在校学生.初学者等刚刚进行单片机开发学习的同学进行录制,带领学生初识Altium Desig ...

  8. 视频教程-快速入门Android开发 视频 教程 android studio-Android

    快速入门Android开发 视频 教程 android studio 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生苦短,我 ...

  9. grread使用例子 lisp_AutoLISP从入门到精通初级教程(新手必备);

    <AutoLISP从入门到精通初级教程(新手必备);>由会员分享,可在线阅读,更多相关<AutoLISP从入门到精通初级教程(新手必备);(36页珍藏版)>请在人人文库网上搜索 ...

最新文章

  1. jquery sortable简述
  2. shell中的IFS
  3. 算法-------二分法查找
  4. 拼多多技术事故复盘,程序员应该学到什么?
  5. eos和以太坊有什么关系_比特币、以太坊、柚子三者的关系
  6. Nacos(四)之安装
  7. ipywidgets_未来价值和Ipywidgets
  8. 如何删除github远程仓库?三部搞定!
  9. [Node.js] mySQL数据库 -- 英雄英雄管理系统接口
  10. goto php 源码,GoToPHP
  11. kubenetes 1.4 安装后8080端口无法访问
  12. GCC和C99标准中inline
  13. 吉林警察学院计算机考研,吉林警察学院怎么样
  14. OpenG: 单模型旋转
  15. iOS抓包工具Charles
  16. Wannacry“永恒之蓝”勒索病毒最全防范措施
  17. java笔记 方法_Java笔记-方法
  18. 计算机里藏应用,用这3招,轻松揪出电脑中的隐藏文件,让恶意软件无处藏身...
  19. edge播放视频HTML5黑屏,Win10 edge浏览器播放视频黑屏解决方法
  20. php软件测试课程资源共享网站

热门文章

  1. 怎么在linux终端上sed,Linux中如何使用sed命令
  2. 求离散数据的突变点_数据的离散程度分析1
  3. C语言错误c2063,请教C语言中关于将二维数组复制到一个三维数组的问题
  4. Dubbo 集成 ZooKeeper 注册中心实现服务调用
  5. windows服务器系统巡检脚本,sql server 数据库巡检脚本
  6. linux文件夹做链接,linux为什么不能给目录做硬链接
  7. vega56刷64_Vega56刷入BIOS跑分直逼旗舰Vega64
  8. python使用joblib多进程执行for循环
  9. torchtext建立词表build_vocab()时使用自己的word2vec模型
  10. pytorch Embedding模块,自动为文本加载预训练的embedding