本帖最后由 Cjy_JDxy 于 2020-4-26 18:52 编辑
板子到了,感觉很不错。一个精致的白盒子,还有一根线,板子也白白的,像个
穿白衣服的少女,我喜欢。
装了KEIL支持包
打开外部中断工程,设置如下
原理图:
代码:
#include "gd32e23x.h"
#include "gd32e231c_start.h"
#include "systick.h"
void led_config(void);
void led_flash(int times);
void exti_config(void);
void gpio_config(void);
void timer_config(void);
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
/* initialize KEY and LED, configure SysTick */
gd_eval_key_init(KEY_WAKEUP, KEY_MODE_EXTI);
led_config();
systick_config();
/* flash the LED for test */
led_flash(1);
/* configure EXTI, TIMER */
exti_config();
gpio_config();
timer_config();
while(1){
}
}
/*!
\brief configure the LEDs
\param[in] none
\param[out] none
\retval none
*/
void led_config(void)
{
gd_eval_led_init(LED1);
}
/*!
\brief configure the EXTI(PA5)
\param[in] none
\param[out] none
\retval none
*/
void exti_config(void)
{
/* enable the clock */
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_CFGCMP);
/* configure GPIO as input */
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_5);
/* enable and set EXTI interrupt */
nvic_irq_enable(EXTI4_15_IRQn, 1U);
/* connect EXTI line to GPIO pin */
syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN5);
/* configure EXTI line */
exti_init(EXTI_5, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
exti_interrupt_flag_clear(EXTI_5);
}
/*!
\brief configure the GPIO ports
\param[in] none
\param[out] none
\retval none
*/
void gpio_config(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
/* configure PA6(TIMER2 CH0) as alternate function */
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_6);
}
/*!
\brief configure the TIMER peripheral
\param[in] none
\param[out] none
\retval none
*/
void timer_config(void)
{
/* -----------------------------------------------------------------------
TIMER2CLK is 100KHz
TIMER2 channel0 duty cycle = (25000/ 50000)* 100 = 50%
----------------------------------------------------------------------- */
timer_oc_parameter_struct timer_ocintpara;
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER2);
timer_deinit(TIMER2);
/* TIMER configuration */
timer_initpara.prescaler = 719;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 49999;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0;
timer_init(TIMER2,&timer_initpara);
/* configurate CH0 in PWM mode0 */
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
timer_channel_output_config(TIMER2,TIMER_CH_0,&timer_ocintpara);
timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_0,24999);
timer_channel_output_mode_config(TIMER2,TIMER_CH_0,TIMER_OC_MODE_PWM0);
timer_channel_output_shadow_config(TIMER2,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);
/* auto-reload preload enable */
timer_auto_reload_shadow_enable(TIMER2);
/* auto-reload preload enable */
timer_enable(TIMER2);
}
/*!
\brief flash the LED for test
\param[in] times: times to flash the LED
\param[out] none
\retval none
*/
void led_flash(int times)
{
int i;
for (i = 0;i < times;i++){
/* delay 500 ms */
delay_1ms(500);
/* toggle the LED */
gd_eval_led_toggle(LED1);
/* delay 500 ms */
delay_1ms(500);
/* toggle the LED */
gd_eval_led_toggle(LED1);
}
}
效果图:
工程
EXIT.rar
(610.04 KB)
|