|
[GD32E231C-START] 串口shell调试
[复制链接]
上一节对已经初步体验了 GD32E231C,这一节讲究如何开发,对于开发mcu来说,需要了解其芯片手册以及sdk,通常我们找一些辅助来配合调试MCU,除了仿真器就是串口打印。这一节我们用shell辅助,之前找到一个shell,比较不错,所以移植到GD32E231C,要用串口shell,那就需要串口功能,本次采用中断接收,查询发送,代码如下:- void com_gpio_init(void)
- {
- /* enable COM GPIO clock */
- rcu_periph_clock_enable(RCU_GPIOA);
- /* connect port to USARTx_Tx */
- gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);
- /* connect port to USARTx_Rx */
- gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);
- /* configure USART Tx as alternate function push-pull */
- gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);
- gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);
- /* configure USART Rx as alternate function push-pull */
- gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);
- gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10);
- }
复制代码- void com_usart_init(void)
- {
- /* enable USART clock */
- rcu_periph_clock_enable(RCU_USART0);
- /* USART configure */
- usart_deinit(USART0);
- usart_word_length_set(USART0, USART_WL_8BIT);
- usart_stop_bit_set(USART0, USART_STB_1BIT);
- usart_parity_config(USART0, USART_PM_NONE);
- usart_baudrate_set(USART0, 115200U);
- usart_receive_config(USART0, USART_RECEIVE_ENABLE);
- usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
- usart_enable(USART0);
-
- /* enable USART TBE interrupt */
- //usart_interrupt_enable(USART0, USART_INT_TBE);
-
- /* enable USART RBNE interrupt */
- usart_interrupt_enable(USART0, USART_INT_RBNE);
-
- /* USART interrupt configuration */
- nvic_irq_enable(USART0_IRQn, 0);
- }
复制代码
- void USART0_IRQHandler(void)
- {
- uint8_t receiver_byte;
- if (RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE))
- {
- /* receive data */
- receiver_byte = usart_data_receive(USART0);
- shellHandler(&shell, receiver_byte);
- }
- }
复制代码- void shellprintchar(const char ch)
- {
- usart_data_transmit(USART0, (uint8_t) ch);
- while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));
- }
- SHELL_TypeDef shell;
- void func(int i, char ch, char *str)
- {
- printf("input int: %d, char: %c, string: %s\r\n", i, ch, str);
- }
- SHELL_EXPORT_CMD(func, func, test);
- void led0_on(void)
- {
- gpio_bit_set(GPIOA, GPIO_PIN_7);
- }
- SHELL_EXPORT_CMD(led0_on, led0_on, led0_on);
- void led0_off(void)
- {
- gpio_bit_reset(GPIOA, GPIO_PIN_7);
- }
- SHELL_EXPORT_CMD(led0_off, led0_off, led0_off);
- void led1_on(void)
- {
- gpio_bit_set(GPIOA, GPIO_PIN_8);
- }
- SHELL_EXPORT_CMD(led1_on, led1_on, led1_off);
- void led1_off(void)
- {
- gpio_bit_reset(GPIOA, GPIO_PIN_8);
- }
- SHELL_EXPORT_CMD(led1_off, led1_off, led1_off);
- void led2_on(void)
- {
- gpio_bit_set(GPIOA, GPIO_PIN_11);
- }
- SHELL_EXPORT_CMD(led2_on, led2_on, led2_on);
- void led2_off(void)
- {
- gpio_bit_reset(GPIOA, GPIO_PIN_11);
- }
- SHELL_EXPORT_CMD(led2_off, led2_off, led2_off);
- void led3_on(void)
- {
- gpio_bit_set(GPIOA, GPIO_PIN_12);
- }
- SHELL_EXPORT_CMD(led3_on, led3_on, led3_on);
- void led3_off(void)
- {
- gpio_bit_reset(GPIOA, GPIO_PIN_12);
- }
- SHELL_EXPORT_CMD(led3_off, led3_off, led3_off);
复制代码
效果如下:
通过shell来控制LED的亮灭,当然支持别的函数,自己添加支持即可,具体看代码里面的适配说明。
|
|