PWM评测|萤火工场GD32VW553-IOT开发板基础
分享作者:user202202193510
作者昵称:xcc1645286462
评测品牌:萤火工场
评测型号:GD32VW553-IOT
发布时间:2025-03-31 11:50:16
0
前言
GD32VW553-IOT开发板
开源口碑分享内容

萤火工场GD32VW553-IOT--PWM测评

1、GD32VW553-IOT引脚图说明

板卡布局

引脚定义

2、资料下载

固件下载软件

官方IDE

3、新建代码工程

在main.c 文件中输入如下代码:

#include "gd32vw55x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"

void init_uart2(){

	rcu_periph_clock_enable(RCU_GPIOA);
	rcu_periph_clock_enable(RCU_UART2);

	// TX
	gpio_af_set(GPIOA, GPIO_AF_10,GPIO_PIN_6);
	gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_6);
	gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_6);

	// RX
	gpio_af_set(GPIOA, GPIO_AF_8,GPIO_PIN_7);
	gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_7);
	gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_7);

	/* USART configure */
	usart_deinit(UART2);
	usart_baudrate_set(UART2, 115200U);
	usart_receive_config(UART2, USART_RECEIVE_ENABLE);
	usart_transmit_config(UART2, USART_TRANSMIT_ENABLE);
	usart_enable(UART2);

}

void init_pwm(){

	rcu_periph_clock_enable(RCU_GPIOA);
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_MAX,GPIO_PIN_2);
    gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_2);


    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;

    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
    rcu_periph_clock_enable(RCU_TIMER1);

    timer_deinit(TIMER1);

    /* TIMER1 configuration */
    timer_initpara.prescaler         = 159;
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 15999;
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER1,&timer_initpara);



    /* CH0,CH1 and CH2 configuration in PWM mode */
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;


    timer_channel_output_config(TIMER1,TIMER_CH_2,&timer_ocintpara);

    timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_2,8000);
    timer_channel_output_mode_config(TIMER1,TIMER_CH_2,TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER1,TIMER_CH_2,TIMER_OC_SHADOW_DISABLE);


    timer_auto_reload_shadow_enable(TIMER1);
    timer_enable(TIMER1);
}

/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
#ifdef __FIRMWARE_VERSION_DEFINE
    uint32_t fw_ver = 0;
#endif /* __FIRMWARE_VERSION_DEFINE */

    /* configure systick */
    systick_config();
    eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);

    init_uart2();
    init_pwm();

#ifdef __FIRMWARE_VERSION_DEFINE
    fw_ver = gd32vw55x_firmware_version_get();
    /* print firmware version */
    printf("\r\nGD32VW55X series firmware version: V%d.%d.%d", (uint8_t)(fw_ver >> 24), (uint8_t)(fw_ver >> 16), (uint8_t)(fw_ver >> 8));
#endif /* __FIRMWARE_VERSION_DEFINE */

    /* print out the clock frequency of system, AHB, APB1 and APB2 */
    printf("\r\nCK_SYS is %d\r\n", rcu_clock_freq_get(CK_SYS));
    printf("\r\nCK_AHB is %d\r\n", rcu_clock_freq_get(CK_AHB));
    printf("\r\nCK_APB1 is %d\r\n", rcu_clock_freq_get(CK_APB1));
    printf("\r\nCK_APB2 is %d\r\n", rcu_clock_freq_get(CK_APB2));

    while(1) {
    	 delay_1ms(500);
    	 printf("running...\r\n");

    }
}

4、编译、烧录

编译

选择Project--Build Project 开始编译工程

烧录

注意:点击连接之前,按住开发板reset按钮,然后重新上电


5、最后

至此已完成,演示视频可看以下链接

全部评论
暂无评论
0/144