本例记录使用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。

- 使能GPIO Group时钟。
- 使能Alternate Function时钟。
- 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为有效电平,否则为无效

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

被折叠的 条评论
为什么被折叠?



