GD32L233C-START开发板评测之开发板简介(一)
[复制链接]
本帖最后由 emmnn 于 2022-1-16 22:47 编辑
前言
年尾无事,上班论坛划水,偶然间看到有测评活动,申请后有幸成为第二批入围的体验者。在经过漫长地等待,期间因为疫情,还担心快递停运,所幸最终板子顺利到手。
一、板子介绍
对于板子的基本情况,已经有很多论坛的朋友发帖详细介绍过了,这里我就不再赘述,只简单介绍下最基本的情况。
这块开发板所使用的MCU是GD32L233CCT6,这是兆易在21年10月份推出的一款基于ARM Cortex-M23内核32MCU,整个芯片设计主打的是低功耗这一理念,可以应用于小型消费电子,便携式医疗设备等领域。GD32L233CCT6的片上flash高达256kb,同时带有32kb的SRAM,主频据介绍最高可达64MHZ。以上是MCU的基本情况,对于开发板,从上图可以看出来,基本上也没有什么东西,两个按键(一个复位按键),4个led灯,还带有一个USB转串口芯片CH340,其他也就没啥了。唯一值得一提的是,这个板子上面还集成了GD-Link(一开始拿到开发板时还在纳闷怎么有两个MCU在上面)。整个PCB板感觉还是可以,但是还是有两个方面想吐槽下,一个是排针,没焊接可以理解,但是关键是,寄过来就这一块板啊,连排针也不给配,最难受的还是那几个MINI USB口,也没送,板子到手后翻箱倒柜找了很久才找到两条(其中一条还只能当供电线用)。
二、例程
介绍完开发板的基本情况后,我们就可以开始写一下简单的例程跑一下板子了。
对于例程的编写,官方还是提供了很多的资料可以作为参考的。这里我们就从串口输出“hello world”和点亮led灯开始吧。
对于这部分的硬件原理图如下:
先从led开始,相关的宏定义+初始化如下
#define LED12_RCU RCU_GPIOA
#define LED34_RCU RCU_GPIOC
#define LED12_GPIO_PORT GPIOA
#define LED34_GPIO_PORT GPIOC
#define LED1_GPIO_PIN GPIO_PIN_7
#define LED1_GPIO_SET() gpio_bit_set(LED12_GPIO_PORT, LED1_GPIO_PIN)
#define LED1_GPIO_CLR() gpio_bit_reset(LED12_GPIO_PORT, LED1_GPIO_PIN)
#define LED1_TOGGLE() gpio_bit_toggle(LED12_GPIO_PORT, LED1_GPIO_PIN)
#define LED2_GPIO_PIN GPIO_PIN_8
#define LED2_GPIO_SET() gpio_bit_set(LED12_GPIO_PORT, LED2_GPIO_PIN)
#define LED2_GPIO_CLR() gpio_bit_reset(LED12_GPIO_PORT, LED2_GPIO_PIN)
#define LED2_TOGGLE() gpio_bit_toggle(LED12_GPIO_PORT, LED2_GPIO_PIN)
#define LED3_GPIO_PIN GPIO_PIN_6
#define LED3_GPIO_SET() gpio_bit_set(LED34_GPIO_PORT, LED3_GPIO_PIN)
#define LED3_GPIO_CLR() gpio_bit_reset(LED34_GPIO_PORT, LED3_GPIO_PIN)
#define LED3_TOGGLE() gpio_bit_toggle(LED34_GPIO_PORT, LED3_GPIO_PIN)
#define LED4_GPIO_PIN GPIO_PIN_7
#define LED4_GPIO_SET() gpio_bit_set(LED34_GPIO_PORT, LED4_GPIO_PIN)
#define LED4_GPIO_CLR() gpio_bit_reset(LED34_GPIO_PORT, LED4_GPIO_PIN)
#define LED4_TOGGLE() gpio_bit_toggle(LED34_GPIO_PORT, LED4_GPIO_PIN)
void led_init(void)
{
/* enable the LED GPIO clock */
rcu_periph_clock_enable(LED12_RCU);
rcu_periph_clock_enable(LED34_RCU);
/* configure LED GPIO pin */
gpio_mode_set(LED12_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED1_GPIO_PIN | LED2_GPIO_PIN);
gpio_output_options_set(LED12_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED1_GPIO_PIN | LED2_GPIO_PIN);
gpio_mode_set(LED34_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED3_GPIO_PIN | LED4_GPIO_PIN);
gpio_output_options_set(LED34_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED3_GPIO_PIN | LED4_GPIO_PIN);
/* reset LED GPIO pin */
gpio_bit_reset(LED12_GPIO_PORT, LED1_GPIO_PIN | LED2_GPIO_PIN);
gpio_bit_reset(LED34_GPIO_PORT, LED3_GPIO_PIN | LED4_GPIO_PIN);
}
接着就是USART部分的初始化
#define DEBUG_COM_PER USART0
#define DEBUG_COM_BAUD (115200UL)
#define DEBUG_USART_GPIO_PORT GPIOA
#define DEBUG_USART_TX_PIN GPIO_PIN_9
#define DEBUG_USART_RX_PIN GPIO_PIN_10
#define DEBUG_COM_CLK RCU_USART0
#define DEBUG_COM_GPIO_CLK RCU_GPIOA
#define DEBUG_COM_AF GPIO_AF_7
void usartInit(uint32_t usart_periph, uint32_t baud)
{
uint32_t com_id = 0U;
/* enable COM GPIO clock */
rcu_periph_clock_enable(DEBUG_COM_GPIO_CLK);
/* enable USART clock */
rcu_periph_clock_enable(DEBUG_COM_CLK);
/* connect port to USARTx_Tx */
gpio_af_set(DEBUG_USART_GPIO_PORT, DEBUG_COM_AF, DEBUG_USART_TX_PIN);
/* connect port to USARTx_Rx */
gpio_af_set(DEBUG_USART_GPIO_PORT, DEBUG_COM_AF, DEBUG_USART_RX_PIN);
/* configure USART Tx as alternate function push-pull */
gpio_mode_set(DEBUG_USART_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, DEBUG_USART_TX_PIN);
gpio_output_options_set(DEBUG_USART_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, DEBUG_USART_TX_PIN);
/* configure USART Rx as alternate function push-pull */
gpio_mode_set(DEBUG_USART_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, DEBUG_USART_RX_PIN);
gpio_output_options_set(DEBUG_USART_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, DEBUG_USART_RX_PIN);
/* USART configure */
usart_deinit(DEBUG_COM_PER);
usart_baudrate_set(DEBUG_COM_PER, DEBUG_COM_BAUD);
usart_receive_config(DEBUG_COM_PER, USART_RECEIVE_ENABLE);
usart_transmit_config(DEBUG_COM_PER, USART_TRANSMIT_ENABLE);
usart_enable(DEBUG_COM_PER);
}
为了方便后续的调试工作,我们这边还需要将printf重定义到串口usart0输出,因此需要重定义fputc函数
int fputc(int ch, FILE *f)
{
//等待先前数据传输到移位寄存器
while(!usart_flag_get(DEBUG_COM_PER, USART_FLAG_TBE));
//发送字符
usart_data_transmit(DEBUG_COM_PER, ch);
return ch;
}
ok,基本的工作都已经完成了,最后是main.c
int main(void)
{
systick_config();
usartInit(DEBUG_COM_PER, DEBUG_COM_BAUD);
led_init();
printf("hello world. \r\n");
while(1) {
LED1_TOGGLE();
LED2_TOGGLE();
LED3_TOGGLE();
LED4_TOGGLE();
delay_1ms(1000);
}
}
编译,烧录,最后运行如下
最后可以看到4个led灯按照1s的频率同时进行闪烁(效果可以看附件视频文件),同时查看串口输出
好了,今天关于GD32L233C-START开发板的介绍就先到这里,后续有时间再分享其他内容给大家。如果所发内容有什么错误或者大家有什么其他的见解,也欢迎大家在评论区指出,谢谢!
|