GD32 Timer+ADC多通道+DMA+PWM调试记录

本文介绍如何使用GD32307C开发板,通过内部Timer1CH1触发ADC0的两个通道进行并行非连续采样,并利用DMA传输采样结果。此外,还展示了如何配置PWM来监测触发周期。

本例记录使用GD32307C开发板,实现以内部Timer1 CH1为触发源,触发ADC0的两个通道,进行并行非连续采样,病通过DMA传输采样结果。同时输出PWM,用来检测Timer1 CH1的触发周期。

下面介绍具体实现过程:

1. gpio初始化

本例需要用到以下三根IO:

PA1 -- TIMER1_1,PWM
PC3 -- ADC0_CH13
PC5 -- ADC0_CH15

查询芯片手册需要将PC3/PC5设定为模拟输入AIN(ADC功能),将PA1设定为备份功能输出脚AF_PP(PWM输出)。

以PA1为例,设定为Alternate功能后,如果有启动Timer1,则该脚位的功能为TIMER1_CH1。

  1. 使能GPIO Group时钟。
  2. 使能Alternate Function时钟。
  3. GPIO 功能config 。

代码如下:

/*!
    \brief      configure the GPIO peripheral
    \param[in]  none
    \param[out] none
    \retval     none
*/
//PA1 -- TIMER1_1,PWM
//PC3 -- ADC0_CH13
//PC5 -- ADC0_CH15
static void gpio_config(void)
{
	/* enable GPIOC clock */
	rcu_periph_clock_enable(RCU_GPIOC);
	rcu_periph_clock_enable(RCU_GPIOA); 

	/* 开启复用功能时钟 */
  rcu_periph_clock_enable(RCU_AF);	

  /* config the GPIO as analog mode */  
  gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_3|GPIO_PIN_5);

  /*configure PB3(TIMER1 CH1) as alternate function*/
  gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
}

2.Timer初始化

这里配置Timer1的定时周期为1ms,附上Timer时间公式:

定时时间:Time= (1+prescaler)/ systemcoreclock *(1+period)

我这边systemcoreclock为120MHZ。

设定CH1位PWM0模式输出,用来验证ADC采样间隔(ADC采样以内部Timer1_CH1为触发源)。

在下面代码里面,我们设定为边沿对齐方式(EAPWM),向上计数:

EAPWM的周期由TIMERx_CAR寄存器值决定,占空比由TIMERx_CHxCV寄存器值决定。

这里介绍一下PWM的工作模式(PWM0/PWM1)

PWM的工作模式:

  • PWM 模式0。在向上计数时,一旦计数器值小于TIMERx_CH0CV时,
    O0CPRE为有效电平,否则为无效
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值