[开发工具]

【华大测评2】HC32F460_EVB运行RT-Thread4.0.1(Shell+OLED+流水灯)

[复制链接]
1138|7
手机看帖
扫描二维码
随时随地手机跟帖
nich20xx|  楼主 | 2020-10-28 08:28 | 显示全部楼层 |阅读模式
本帖最后由 nich20xx 于 2020-10-28 08:33 编辑

1 前言

华大半导体HC32F460是国产的MCU,是一款基于32bit Cortex-M4F内核 、集成FPU、MPU及支持SIMD指令DSP的高性能微控制器HC32F460PETB。最大主频168MHz,512K FLASH,192K SRAM,具有非常丰富的片上资源,支持2个独立12-bit 2.5MSPS ADC,DAC、1个PGA、3个高速比较器CMP,众多的通信接口有I2C、I2S、SPI、USART、SDIO、QSPI、CAN、USB2.0 FS,支持AES/HASH/TRNG数据加密功能

RT-Thread 是国产的RTOS,是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。RT-Thread 具备一个 IoT OS 平台所需的所有关键组件,例如GUI、网络协议栈、安全传输、低功耗组件等等。

两个国产软硬件平台强强联合,是未来产品开发的一个非常好的组合。

2 HC32F460_EVB BSP

华大半导体有大神已经移植好了适配RT-Thread与HC32F460_EVB的BSP。

  • 下载 https://github.com/SourceWolf/HC32F460_RT_Thread/tree/master/rt_thread
  • HC32F460_RT_Thread-master\rt_thread\bsp\hc32f46x\drivers
  • 该BSP当前支持片内硬件USART、硬件I2C

image1.png

  • 可以通过ENV工具选择实际使用的芯片外设

image2.png

3 RT-Thread应用示例( Shell+OLED+流水灯 )2.1 Shell串口

RT-Thread Shell串口使用USART3

image3.png

image8.png
2.2 OLED
0.91英寸的OLED(128*32) 使用I2C2。
image4.png

OLED 128x32 软件驱动直接使用RT-Thread中的软件包u8g2。

      打开rt-thread ENV工具,在menuconfig中,选择“RT-Thread online packages  --->  peripheral libraries and drivers  ---> U8G2: a monochrome graphic library  ”
image9.png image10.png
  • u8g2_port.c屏蔽所有rt_pin_mode操作(当前不支持pin)
  • 增加如下OLED测试示例
static void ssd1306_12832_hw_i2c_example(int argc,char *argv[])
{
    u8g2_t u8g2;

    // Initialization
    u8g2_Setup_ssd1306_i2c_128x32_univision_f( &u8g2, U8G2_R0, u8x8_byte_rt_hw_i2c, u8x8_rt_gpio_and_delay);
    u8g2_InitDisplay(&u8g2);
    u8g2_SetPowerSave(&u8g2, 0);

    /* full buffer example, setup procedure ends in _f */
    u8g2_ClearBuffer(&u8g2);
    u8g2_SetFont(&u8g2, u8g2_font_ncenB08_tr);
    u8g2_DrawStr(&u8g2, 1, 18, "U8g2 on HC32F460_EVB");
    u8g2_SendBuffer(&u8g2);
}
MSH_CMD_EXPORT(ssd1306_12832_hw_i2c_example, i2c ssd1306 sample);
2.2 流水灯
image5.png
/* LED0~3 toggle definition */
#define  LED0_TOGGLE()    PORT_Toggle(LED0_PORT, LED0_PIN)
#define  LED1_TOGGLE()    PORT_Toggle(LED1_PORT, LED1_PIN)
#define  LED2_TOGGLE()    PORT_Toggle(LED2_PORT, LED2_PIN)
#define  LED3_TOGGLE()    PORT_Toggle(LED3_PORT, LED3_PIN)

int32_t main(void)
{
    //......
    while(1)
    {
        LED0_TOGGLE();
        rt_thread_delay(DELAY_MS);
        LED1_TOGGLE();
        rt_thread_delay(DELAY_MS);
        LED2_TOGGLE();
        rt_thread_delay(DELAY_MS);
        LED3_TOGGLE();
        rt_thread_delay(DELAY_MS);
    };
}
2.3 运行结果
  • 串口打印如下信息
  • LED流水灯
image6.png
shell命令窗口,输入ssd1306_12832_hw_i2c_example,OLED显示“u8g2 on HC32F460_EVB”
image7.png
4 参考
  • HC32F460 RT-Thread BSP https://github.com/SourceWolf/HC32F460_RT_Thread/tree/master/rt_thread
  • 华大MCU官网 https://www.hdsc.com.cn/
  • RT-Thread官网 https://www.rt-thread.org/

使用特权

评论回复
BettyBerry| | 2020-10-28 23:31 | 显示全部楼层
谢谢楼主分享 HC32F460的板子看起配置很齐全啊

使用特权

评论回复
范德萨大师傅| | 2020-10-31 21:01 | 显示全部楼层
u8g2_Setup_ssd1306_i2c_128x32_univision_f( &u8g2, U8G2_R0, u8x8_byte_rt_hw_i2c, u8x8_rt_gpio_and_delay);
    u8g2_InitDisplay(&u8g2);
    u8g2_SetPowerSave(&u8g2, 0);

使用特权

评论回复
人的发个哈哈| | 2020-10-31 21:02 | 显示全部楼层
当前不支持pin

使用特权

评论回复
RTX3080| | 2020-11-20 10:12 | 显示全部楼层
哪里能搞到这个板子?

使用特权

评论回复
rickluo| | 2020-11-20 10:17 | 显示全部楼层
RTX3080 发表于 2020-11-20 10:12
哪里能搞到这个板子?

联系我们,我们专业做开发板 "xyxchiip.taobao.com"

使用特权

评论回复
海滨消消| | 2020-11-23 11:21 | 显示全部楼层
华大半导体适配RT-Thread与HC32F460_EVB的BSP

使用特权

评论回复
Puremr| | 2020-11-26 09:21 | 显示全部楼层
Shell是什么意思呢?串口的指令交互吗、。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝