[第3期 空气质量分析仪]第二周-基于串口,学习RTT系统设备...

发表在 实战入门学习营2019-10-24 12:55 [复制链接] 0 195

本帖最后由 TBIQ_3050 于 2019-10-24 12:57 编辑
4 z% ^$ W; U6 T, o9 A3 U' p9 |% T0 O" v  v0 P9 f/ q
基于串口,学习RTT系统设备框架原理
) N( q* A  J# R+ ~- g0 k" T+ N
这两周都是学习RTT的硬件管理框架,刚好是在使用串口,现在深入代码,跟踪一下框架启动加载流程

) L7 Y5 ]' d8 G( t$ f! \
理论知识:RTT共分4层,
最上一次是是APP,也就是任务级的,往下是DEVICE层,再往下是设备驱动层,再往下是底层硬件层。看图

) z, g, W' B0 P! S8 d
io-dev.png
一、初始注册过程
RTT中,跟踪代码,在4.0版本中,执行MAIN前,初始化的函数是Kernel目录中的components.c中,
21.jpg
进入rtthread_startup();
3.jpg
进入板级初始化,这里会进入drv_common.c文件了
4.jpg
选择串口初始化函数rt_hw_usart_init(),又进入下一层,进入drv_usart.c文件,这里面定义串口的一些控制结构体,后面rt_hw_serial_register这个函数注册进系统,跟进这个函数
5.jpg
进入rt_hw_serial_register函数,这里会进入串口驱动框架层了,位于serial.c文件,继续跟进里面的rt_device_register函数
6.jpg
进入rt_device_register后,可以看到注册到系统了
7.jpg
) f+ c2 Z7 l4 z, ^( }8 ~. ^2 K) v
* ?  h+ q6 h; d4 U7 N: ^
二、APP 使用串口过程。打开,读写过程
1、查找串口设备
   /* 查找系统中的串口设备 */
   uart_device = rt_device_find(PM25_USE_UART);
   2 对串口参数进行设置
if (RT_EOK !=rt_device_control(uart_device, RT_DEVICE_CTRL_CONFIG,(void*)&pm25_use_config))
    {
       rt_kprintf("uart config failed.\n");
       return RT_ERROR;
    }
3 打开串口设备
if (uart_open(uart_device) != RT_EOK)
    {
       rt_kprintf("uart open error.\n");
       return RT_ERROR;
    }
后面就可以正常读写

$ J: \9 E! F. g9 ~( L) H4 Z9 y; ~
& E% t! c! m7 F- l8 T3 s5 Q
* f) E9 O! f+ v" E
//////////////////////////////////////////////////////////////////////
/ u6 p; T0 w3 L8 s; L# P' v+ E
0 W" p/ m7 i3 `8 `! _
打开串口过程分析:打开串口过来比较复杂,先看一个系统 调用图
00.jpg
' M$ ~+ p  k0 u/ T- W2 f) n1 \
可以看到分层调用关系。2个底层函数HAL_UART_Init函数
88.jpg

# c" h5 ]3 H* R& b( Y1 y
以及HAL_UART_MspInit函数,这里是最底层串口脚定义,设置参数这些。

; v. y$ Z; J; @/ I
99.jpg
: _$ W9 |1 R. E  Q, a/ Y/ c) W
总结:RTT的系统框架为了保证移植性,分层设计,各层修改相互影响比较小,这样在硬件迁移时改动会比较小,这个是优点。但层层包装,增加了系统复杂性,阅读理解还是要花点时间。

$ g' H4 q5 |* {! u; }" X
4 }$ T% [8 |& y$ o4 _, E
第二周任务,写2个线程,分别打印2个传感器的信息,成功后,正常打印出来
01.jpg

7 Y8 P3 A- f, W* i0 o# L
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 5 主题
  2. 49 帖子
  3. 49 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表