2797|0

565

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【GD32L233C-START评测】14、RT-Thread内核、finsh移植到GD32L233 [复制链接]

本帖最后由 freeelectron 于 2022-2-7 13:05 编辑

相关文章:

【GD32L233C-START评测】1、优点与缺点都很明显的GD32L233C-START(开箱)

【GD32L233C-START评测】2、非阻塞方式点灯,blink,blink,blink……

【GD32L233C-START评测】3、pwm实现呼吸灯

【GD32L233C-START评测】4、串口不定长数据接收

【GD32L233C-START评测】5、Flash读写——使用内部Flash存储数据

【GD32L233C-START评测】6、硬件I2C驱动0.96吋OLED

 

【GD32L233C-START评测】7、硬件SPI1驱动RC522

【GD32L233C-START评测】8、获取MCU96位唯一ID、SRAM、FLASH大小

【GD32L233C-START评测】9、IAP程序升级——基于YMODEM协议

【GD32L233C-START评测】10、使用内部参考电压校准adc,adc采样更准确

【GD32L233C-START评测】11、GD32 ISP软件还不支持GD32L233

【GD32L233C-START评测】12、按键——外部中断

 

【GD32L233C-START评测】13、I2C驱动环境光和接近传感器RPR-0521RS

 

1、安装RT-Thread keil Pack

或者离线下载安装

https://www.rt-thread.org/download/mdk/RealThread.RT-Thread.3.1.5.pack

2、在工程中勾选RTOS中的kernel shell

   

3、编译报错

 

4、配置时钟#error "TODO 1: OS Tick Configuration."

  • // #error "TODO 1: OS Tick Configuration."
  • SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
  • NVIC_SetPriority(SysTick_IRQn, 0x00U);
  • void SysTick_Handler(void)
  • {
  • void rt_os_tick_callback(void);
  • rt_os_tick_callback();
  • }

 

5、配置串口#error "TODO 2: Enable the hardware uart and config baudrate."

  • //#error "TODO 2: Enable the hardware uart and config baudrate."
  • extern void SerialInit(void);
  • SerialInit();
  • void SerialInit(void)
  • {
  • /* enable COM GPIO clock */
  • rcu_periph_clock_enable(RCU_GPIOA);
  • /* enable USART clock */
  • rcu_periph_clock_enable(RCU_USART0);
  • /* connect port to USART TX */
  • gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9);
  • /* connect port to USART RX */
  • gpio_af_set(GPIOA, GPIO_AF_7, 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_10);
  • /* 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);
  • /* 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);
  • }

 

6、串口输出#error "TODO 3: Output the string 'str' through the uart."

  • //#error "TODO 3: Output the string 'str' through the uart."
  • extern void _rt_hw_console_output( const char *str );
  • _rt_hw_console_output(str);
  • void _rt_hw_console_output( const char *str )
  • {
  • rt_size_t i = 0, size = 0;
  • char a = '\r';
  • size = rt_strlen(str);
  • for (i = 0; i < size; i++)
  • {
  • if (*(str + i) == '\n')
  • {
  • usart_data_transmit(USART0, (uint32_t )a);
  • while((usart_flag_get(USART0, USART_FLAG_TC) == RESET));
  • }
  • usart_data_transmit(USART0, (uint32_t)*(str + i));
  • while((usart_flag_get(USART0, USART_FLAG_TC) == RESET));
  • }
  • }

 

7、串口输入#error "TODO 4: Read a char from the uart and assign it to 'ch'."

  • //#error "TODO 4: Read a char from the uart and assign it to 'ch'."
  • extern char _rt_hw_console_getchar(void);
  • ch= _rt_hw_console_getchar();

 

  • char _rt_hw_console_getchar(void)
  • {
  • /* the initial value of ch must < 0 */
  • int ch = -1;
  • if (usart_flag_get(USART0, USART_FLAG_RBNE) != RESET)
  • {
  • ch = usart_data_receive(USART0);
  • }
  • else
  • {
  • rt_thread_mdelay(10);
  • }
  • return ch;
  • }

8PendSV_HandlerHardFault_Handler重复定义

 PendSV_HandlerHardFault_Handler两个中断,RT-Thread系统处理,屏蔽掉gd32l23x_it.c中的即可。

 

9finsh_config.h未包含

rtconfig.h中包含finsh_config.h

 

10、创建led线程

  • static rt_thread_t led_thread = RT_NULL;
  • void LedInit(void)
  • {
  • /* enable the LED GPIO clock */
  • rcu_periph_clock_enable(RCU_GPIOA);
  • /* configure LED GPIO pin */
  • gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7 | GPIO_PIN_8);
  • gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8);
  • /* reset LED GPIO pin */
  • gpio_bit_reset(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);
  • }
  • static void led_thread_entry(void *parameter)
  • {
  • while (1)
  • {
  • gpio_bit_toggle(GPIOA, GPIO_PIN_7|GPIO_PIN_8);
  • rt_thread_mdelay(1000);
  • rt_kprintf("led blink\r\n");
  • }
  • }
  • void LedThreadStart(void)
  • {
  • led_thread = rt_thread_create( "led", /*线程名字*/
  • led_thread_entry,/*线程入口函数*/
  • RT_NULL,/*线程入口函数参数*/
  • 256, /*线程栈大小*/
  • 4 , /*线程优先级*/
  • 20); /*线程时间片*/
  • rt_thread_startup (led_thread);
  • }

 

11、硬件初始化

 rt_hw_board_init函数中包含led初始化函数。

 

12、在main函数中调用启动led线程

  • int main(void)
  • {
  •     LedThreadStart();
  •     return 0;
  • }

13、现象

 

 

 

 

此帖出自GD32 MCU论坛
点赞 关注
个人签名stm32/LoRa物联网:304350312
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖探索 | 和村田一起,深挖 GNSS 开发!
活动时间:即日起-5月11日
活动奖励:智能手环、螺丝刀套装、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 2

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表