rt-thread 的设备框架模型如下所示:

在一个已经自动配置好底层驱动的工程中(包括设备的驱动,设备的注册等,推荐使用
【RT-Studio】),我们仅需要在rtconfig.h的头文件里添加所需要开启的宏,即可完成设备注册。


在生成的工程中, ②是①更底层的封装,①作用是根据设置的宏定义批量初始化并注册设备,②作用是做好底层驱动,如getc(), putc()等等。

因此假如你不想深究其中的过程的话,那么你可以根据如下示例使用设备:

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <drv_ext_io.h>#define DBG_TAG "MAIN"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>#define LED_B_PIN GET_PIN(B, 7)int main(void)
{int count = 1;rt_pin_mode(LED_B_PIN, PIN_MODE_OUTPUT);LOG_D("test..");rt_device_t uart3;uart3 = rt_device_find("uart3");if(uart3 != RT_NULL){rt_device_open(uart3, RT_DEVICE_OFLAG_RDWR);rt_device_open(uart3, RT_DEVICE_OFLAG_RDWR);LOG_D("device opened!");}while (count++){rt_pin_write(LED_B_PIN, PIN_HIGH);rt_thread_mdelay(200);rt_pin_write(LED_B_PIN, PIN_LOW);rt_thread_mdelay(200);rt_device_write(uart3, 0, "uart3..\r\n", sizeof("uart3..\r\n"));if(count == 100){rt_device_close(uart3);}if(count >= 200){rt_device_close(uart3);//设备开了多少次就得关多少次才会失效}}    return RT_EOK;
}

by the way: 你需要在stm32f4xx_hal_msp.c中将设备的底层驱动写好,示例如下:

  GPIO_InitTypeDef GPIO_InitStruct = {0};if(huart->Instance==USART1){/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 *//* Peripheral clock enable */__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO Configuration    PA9     ------> USART1_TXPA10     ------> USART1_RX */GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* USART1 interrupt Init */HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);/* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */} //上面是原本有的,下面是自己复制粘贴补充的!!else if(huart->Instance==USART3){__HAL_RCC_USART3_CLK_ENABLE();__HAL_RCC_GPIOD_CLK_ENABLE();/**USART1 GPIO Configuration    PA9     ------> USART1_TXPA10     ------> USART1_RX */GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART3;HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);/* USART1 interrupt Init */HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART3_IRQn);}

你没看见这里 哈哈哈
RT-Thread其实自带微秒级延时!

void rt_hw_us_delay(rt_uint32_t us)
{rt_uint32_t start, now, delta, reload, us_tick;start = SysTick->VAL;reload = SysTick->LOAD;us_tick = SystemCoreClock / 1000000UL;do{now = SysTick->VAL;delta = start >= now ? start - now : reload + start - now;}while (delta < us_tick * us);
}

<RT-Thread>I/O设备的使用相关推荐

  1. xpt 2046的触摸屏 rt thread设备驱动框架

    1 基于rtt 开发触摸屏驱动 准备使用rtt 框架 , 驱动xpt 2046的触摸屏, 翻阅大量资料发现, 大部分文章强调的是时序图, 而且很多代码要么直接操作寄存器, 要么是io 口模拟, 只能用 ...

  2. 使用RT Thread设备框架封装一个I2C设备——DS3231

    使用RT Thread设备框架封装一个I2C设备--DS3231 前言 ENV配置 I2C测试 将ds3231封装成一个字符设备 结语 前言 学习rt thread的I2C的时候,恰巧手上的板子留了d ...

  3. 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)

    最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...

  4. rt thread studio使用QBOOT和片外flash实现OTA升级

    我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...

  5. Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32

    1.前言     [2014年4月重写该博文]     经过若干时间的努力终于搞定了STM32+LwIP和yeelink平台的数据互通,在学习的过程中大部分时间花在以太网协议栈学习上,但是在RT Th ...

  6. RT Thread之 Uart2 操作

    官网连接:https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/device/uar ...

  7. stm32f407单片机rt thread 片外spi flash OTA升级配置示例

    参考地址https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/ 第一步,生成Boot ...

  8. RT Thread Studio 配置IIC并读取AS5600角度

    RT Thread Studio 配置IIC并读取AS5600角度 一.RT Thread Studio 配置IIC 1.在RT Thread Seting 中开启IIC功能 并保存 一定要保存才能更 ...

  9. 关于RT thread系统节拍时钟的配置

    关于RT thread系统节拍时钟的配置                  -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...

  10. rt thread 使用FAL遇到fal_init() undefined reference

    rt thread FAL 0.5版,之前有没有不知道,遇到一个坑. 在main.cpp里面已经 #include <fal.h> fal_init() 编译报错,说 fal_init() ...

最新文章

  1. java基础-static
  2. 免费下载!200+讲者核心观点公布!2021最强AI学术会议视频全部回放
  3. 理解AngularJS的作用域Scope
  4. 微软或允许 Android 应用运行于 Windows 和 WP
  5. 2017年9月分c语言,2020年9月中国编程语言排行榜
  6. mysql 两张表合并查询_中级数据分析-多表查询
  7. Redis学习笔记~分布式的Pub/Sub模式
  8. Socket编程实践(1) --TCP/IP简述
  9. Winform 的一个多线程绑定DataGrid数据源的例子
  10. tensorflow 版本列表_最新|谷歌发布TensorFlow 1.3.0版本,都更新了哪些内容?
  11. OpenCV图像处理(3)——盒维数计算
  12. python多线程和多进程
  13. windows下的内存型下载者病毒
  14. uni-app小程序结合腾讯地图获取定位以及地图选址
  15. 数仓建模(数据模型)
  16. mysql主从配置duxi_​WordPress大前端主题DUX 5.1
  17. 【学习笔记】行人异常行为检测的综述
  18. 开封大学计算机专业录取分数线,开封大学录取分数线2021是多少分(附历年录取分数线)...
  19. 基因-药物相互作用数据库 DGIdb 介绍
  20. 计算机正确的坐姿教案,幼儿园中班教案《正确坐姿真精神》(通用).doc

热门文章

  1. socketio java如何知道消息被接收成功_5年经验Java程序员面试20天,拿下数个offer,总结出的经验感想!...
  2. pdf转换成word转换器在线
  3. android wifi wps 流程,android中WiFi wps连接方式
  4. R语言/Python 将地址标记在地图上
  5. linux 可读可写可执行权限 chmod
  6. [读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
  7. tailWindCSS
  8. 电脑好玩技巧3——任务栏透明度
  9. 服务器的1U ,2U分别是什么意思?
  10. MATLAB/Simulink 线性分析工具箱频域分析(手把手教会)