![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RT-Thread
文章平均质量分 87
我我我只会printf
海阔凭鱼跃,山高任鸟飞。
展开
-
(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(4)使用LVGL
我们仔细看一下这lv_rt_thread_port.c 这个文件,发现里面包含一个自动初始化的 lvgl_thread_init 函数,然后这个函数创建了一个 "LVGL" 的线程,现在是线程入口函数找不到相关定义。我们想刷新整个屏幕时,刷新的区域是坐标(0,0)到(159,79)的矩形范围,但是转化为宽高则是起点为(0,0),宽为160,高为80的范围。经过前几章的搭建,底层显示已经没有问题了,现在需要添加上层的库,我选择了比较火的开源GUI库--LVGL。可以修改lv_hal_disp.h中的。原创 2022-11-23 18:07:23 · 2746 阅读 · 0 评论 -
(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(3)使用DMA
上一篇完成了ST7735驱动的移植,并已经可以通过SPI在屏幕上显示字符了,这一章会把SPI修改为DMA的传输方式。由于RTT对于STM32H7的SPI的DMA传输方式目前支持的并不好,这就让上一章裸机方式驱动屏幕派上了用场。我们可以先把SPI+DMA打通,然后再修改内核驱动框架。原创 2022-11-22 14:55:17 · 2355 阅读 · 0 评论 -
(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(2)
需要的可以直接git clone下来移植,核心代码无关,可移植性很不错!第一篇中我们打通了SPI,读取到了芯片ID,这一篇只要完善几个接口函数就可以直接使用官方的驱动库了。至于要完善哪几个接口,需要看一下官方驱动库需要哪些函数。原创 2022-11-18 17:10:05 · 2827 阅读 · 3 评论 -
(STM32)从零开始的RT-Thread之旅--PWM驱动ST7735调光
上一章我们先用SPI读取到了LCD的ID,这一章则是使用PWM调光点亮屏幕,因为测试这块屏幕时,发现直接设置背光引脚为高好像无法点亮,好像必须使用PWM调光,不过反正后面调节亮度还是需要PWM,索性先打通PWM。比如这个寄存器的值是 110,即6,D1CorePrescTable[6] = 3,HCLK的时钟右移3,相当于除以8,正好和上图中计算110:rcc_pclk2的情况相同。这个应该是硬汉出的教程,别人转载的。这里我讲一下我是用的TIM1是怎么配置的,你可以根据需要配置你自己的定时器。原创 2022-11-18 11:37:02 · 1907 阅读 · 1 评论 -
(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(1)
我使用的开发板是WeAct的H743板子,板子带一个0.96的SPI驱动的LCD,给的有现成的测试用例,看源码应该是ST的工程师写的ST7735的驱动,打算把这个驱动直接拿到RTT工程里面使用。这里按正常流程来,先打通SPI,再进行上层功能实现。一般当我们用SPI读取到LCD的ID时,即认为SPI没问题了。这里这块由ST7735驱动的LCD屏幕的SPI接口和一般的不太一样,接线如下:首先SPI是3线制的,MOSI可以读也可以写,然后通过一根线控制读写的是寄存器还是缓存。原创 2022-11-16 17:12:24 · 3909 阅读 · 3 评论 -
(STM32)从零开始的RT-Thread之旅--GPIO
因为我们选择好MCU后RTT Studio就知道了我们芯片的封装,它会自动根据你芯片封装确定你芯片引脚个数,从而知道你的芯片有哪几个GPIO组,这些都不用我们关系和设置。无论什么开发板,最先调试的肯定是GPIO,一般用来用作指示灯或者按键输入。本篇只是很简单的GPIO应用,没有具体分析RTT框架实现。准备工作做好,就可以添加驱动代码。这里我的开发板上的LED是PE3,按键输入是PC13。测试完成可以开始后续模块开发。原创 2022-11-14 12:10:23 · 1797 阅读 · 0 评论 -
(STM32)从零开始的RT-Thread之旅--基础项目构建与时钟配置
硬件:WeAct-STM32H743VIT6软件:RT-Thread Studio记得最开始听到RT-Thread还是在4年前,刚毕业的新人,入职的公司有个项目用的RTT,在学校的时候从来没听过也没用过RTOS。一开始就和老板说了自己什么也不懂,结果老板很霸气的直接拉了一个4人群,群里除了我和老板,还有两个大牛,其中一个就是熊总。但其实我从来没有在群里提问过,因为我想问的问题我自己也知道都是些低级问题,哈哈哈。人贵在有自知之明。原创 2022-11-11 14:35:45 · 1847 阅读 · 0 评论 -
剖析RT-Thread中console与finsh组件实现(3)
最后,我们看一下一个cmd命令是怎么加入到命令空间里的:关键在于宏定义 MSH_CMD_EXPORT ,内容如下:这里在cmd名称前加了 __cmd_ 刚好可以与之前匹配代码相印证。宏定义 FINSH_FUNCTION_EXPORT_CMD 内容如下:和之前自动初始化那里很相似,这里是把cmd的名字和注释变量的数组存于段.rodata.name内。而把cmd结构体填充之后存于段名FSymTab内。为了更加直观,我把参数都替换一下,实际内容如下:FINSH_FUNCTION_EXPORT_C原创 2021-04-09 16:25:00 · 935 阅读 · 1 评论 -
剖析RT-Thread中console与finsh组件实现(2)
接上一章剖析RT-Thread中finsh组件实现(1),rt_device 具体定义如下:其中内核基类定义如下:所以刚才串口1初始化后名称被初始化为了 “usart1” ,与刚才设置终端时入参刚好可以匹配。而这个标志是类型标志,串口类型即为 RT_Object_Class_Device ,同时也是一个静态类,所以会或上0x80其实 rt_device 中最重要的是传入了设备回调与操作函数指针,这些指针此时指向的是串口1的一系列操作函数。这些函数被初始化在串口1初始化的 rt_hw_serial原创 2021-04-09 14:42:01 · 1241 阅读 · 1 评论 -
剖析RT-Thread中console与finsh组件实现(1)
1.版本本文代码版本代码IDE版本:Keil5开发板:STM32F103ZET62.代码流程我们从.s文件开始根据芯片,我们的启动代码为startup_stm32f103xe.s,如下图我们可以看到和其他启动代码并没有区别,在先进入SystemInit函数初始化时钟后,经过一系列操作,最后跳转main函数但在这里,RTT使用了MDK的一个"补丁"功能,给main函数打了一个补丁。如下图。这里__CC_ARM即通过MDK的编译器编译时,会编译下面的函数。文件名components.ctip原创 2021-04-08 17:33:05 · 1157 阅读 · 3 评论