AT32重映射输出PWM

最近在用AT32F403AVGT7,本来想用想用正常的TMR1的TMR_SELECT_CHANNEL_1和TMR_SELECT_CHANNEL_2做PWM输出,但是不巧的是PA8和PA9我做其他用了,所以今天记录下用PE9和PE11的重映射功能输出PWM。

配置代码

/**
  * @brief  PWM参数配置TMR1配置
  * @param  none
  * @retval none
  */
static void PWM_configuration(void)
{
	//定时器输出配置结构体
	tmr_output_config_type tmr_oc_init_structure;
	//GPIO配置结构体
	gpio_init_type gpio_init_struct;
	//使能TMR1时钟
	crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);
	//复用时钟使能
	crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
	//重映射TIMER1			
	gpio_pin_remap_config(TMR1_MUX_11,TRUE);
	//开启GPIOE时钟
	crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);	//开启gpioB时钟
	//初始化GPIO参数
	gpio_default_para_init(&gpio_init_struct);
	//引脚
  gpio_init_struct.gpio_pins = GPIO_PINS_9 | GPIO_PINS_11;					
  gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;		//推挽输出
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;  				//无上下拉
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;					//复用
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init(GPIOE, &gpio_init_struct);

	
	//设置重装载值和预分频			预分频239   重装载值99   周期1ms
	tmr_base_init(TMR1, 999, 239);	
	//设置为向上计数方式	
	tmr_cnt_dir_set(TMR1, TMR_COUNT_UP);		
	//初始化定时器输出结构体
	tmr_output_default_para_init(&tmr_oc_init_structure);
	//PWM模式A
  tmr_oc_init_structure.oc_mode = TMR_OUTPUT_CONTROL_PWM_MODE_A;	
	//输出通道空闲
  tmr_oc_init_structure.oc_idle_state = FALSE;
	//极性,高电平有效
  tmr_oc_init_structure.oc_polarity = TMR_OUTPUT_ACTIVE_HIGH;	
	//使能输出	
  tmr_oc_init_structure.oc_output_state = TRUE;					
	//设置TMR1的通道1
	tmr_output_channel_config(TMR1, TMR_SELECT_CHANNEL_1, &tmr_oc_init_structure);	
	//设置TMR1的通道1的数据寄存器的值(占空比)  占空比= 120 / 999
  tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_1, 120);		
	//设置TMR1的通道1的数据寄存器的值,溢出事件时更新	
  tmr_output_channel_buffer_enable(TMR1, TMR_SELECT_CHANNEL_1, TRUE);				
	//设置TMR1的通道1
	tmr_output_channel_config(TMR1, TMR_SELECT_CHANNEL_2, &tmr_oc_init_structure);
	//设置TMR1的通道1的数据寄存器的值(占空比)	
  tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_2, 120);		
	//设置TMR1的通道1的数据寄存器的值,溢出事件时更新	
  tmr_output_channel_buffer_enable(TMR1, TMR_SELECT_CHANNEL_2, TRUE);				
	
	tmr_period_buffer_enable(TMR1, TRUE);		//TMR1 的重载值,溢出事件时更新
	tmr_output_enable(TMR1, TRUE);			//使能输出,高级定时器特有。
	tmr_counter_enable(TMR1, TRUE);			//使能tmr,开始计数
}

这里输出后可以使用万用表测量对应引脚输出大概是0.39-0.4V左右。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值