PWM评测|萤火工场GD32VW553-IOT开发板基础
分享作者:user202202193510
作者昵称:xcc1645286462
评测品牌:萤火工场
评测型号:GD32VW553-IOT
发布时间:2025-03-31 11:50:16
22 0
前言
开源口碑分享内容
萤火工场GD32VW553-IOT--PWM测评
1、GD32VW553-IOT引脚图说明
板卡布局
引脚定义
2、资料下载
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