Car12
嵌入式开发,爱好者
展开
-
RTT使用遇见的坑
栈线程的栈溢出:bus fault:解决办法:原创 2024-01-18 20:59:18 · 103 阅读 · 0 评论 -
【RTT驱动框架分析】-硬件定时器应用笔记和源码分析
硬件定时器应用笔记和源码分析原创 2023-10-26 20:03:15 · 376 阅读 · 0 评论 -
【RTT驱动框架分析】- 队列DataQueue源码分析
RTT内部队列数据结构的API和数据结构原创 2023-10-26 19:59:54 · 177 阅读 · 0 评论 -
【RTT驱动框架分析07】- adc驱动框架分析+adc中断唤醒adc驱动
实现了adc注册功能,在注册函数内部初始化io口,时钟,adc使能标定实现了adc的单通道采集功能即 convert 函数实现使能函数没有做什么工作,仅仅做了个通道的有效性判定。原创 2023-08-15 22:44:05 · 406 阅读 · 0 评论 -
【RTT驱动框架分析06】-pwn驱动框架分析+pwm驱动实现
因为有的芯片的PWM是具有互补输出功能的,即PWM的某一个通道是可以靠两个引脚来发出一对互补的波形。PWM 的输出频率由周期时间 period 决定,例如周期时间为 0.5ms (毫秒),则 period 值为 500000ns(纳秒),输出频率为 2KHz,占空比为 pulse / period,pulse 值不能超过 period。,第一个参数为命令,第二个参数为 PWM 设备名称,第 3 个参数为 PWM 通道,第 4 个参数为周期(单位纳秒),第 5 个参数为脉冲宽度(单位纳秒)。原创 2023-08-10 21:55:07 · 375 阅读 · 0 评论 -
【RTT驱动框架分析05】-spi驱动框架分析
获取到 SPI 设备句柄就可以使用 SPI 设备管理接口访问 SPI 设备器件,进行数据收发。参数描述deviceSPI 设备句柄message消息指针返回——RT_NULL成功发送非空指针发送失败,返回指向剩余未发送的 message 的指针此函数可以传输一连串消息,用户可以自定义每个待传输的 message 结构体各参数的数值,从而可以很方便的控制数据传输方式。/* 发送缓冲区指针 */ void * recv_buf;/* 接收缓冲区指针 */ rt_size_t length;原创 2023-08-02 22:24:18 · 299 阅读 · 0 评论 -
【RTT驱动框架分析04】-I2C驱动框架分析 at24cxx
和 SPI 总线的自定义传输接口一样,I2C 总线的自定义传输接口传输的数据也是以一个消息为单位。参数 msgs[] 指向待传输的消息数组,用户可以自定义每条消息的内容,实现 I2C 总线所支持的 2 种不同的数据传输模式。在使用 I2C 总线设备前需要根据 I2C 总线设备名称获取设备句柄,进而才可以操作 I2C 总线设备,查找设备函数如下所示,以下两个读写函数封装自 rt_i2c_transfer() 函数,用于读写I2C从设备的数据,更加简单易用,推荐使用。获取到 I2C 总线设备句柄就可以使用。原创 2023-08-02 22:03:57 · 387 阅读 · 0 评论 -
【RTT驱动框架分析03】- sfus flash 操作库的分析和基于STM32F103RCT6+CUBEMX的SFUS移植教程
sfus 是根据flash_table 数组内部提供信息初始化spi总线和初始化sfud_flash_chip (spi flash抽象结构)信息。由下面的信息可知,不同的spi flash擦除命令不一致,读写命令是一致的。修改flash设备列表和flash id。目前支持的spi flash的目标。main.c 文件添加如下内容。修改文件sfus_port.c。这里也是以后可以添加的。到此移植的基本条件满足。原创 2023-07-30 19:16:59 · 306 阅读 · 0 评论 -
【RTT驱动框架分析02】-串口驱动分析
0x00000001。原创 2023-07-29 17:15:20 · 303 阅读 · 0 评论 -
【RTT驱动框架分析01】-pin/gpio驱动分析
绑定的实质就是给pin_irq_hdr_tab 内部的对象成员赋值操作。在rtconfig.h中可能涉及需要开启gpio时钟。内部实质就是设置中断分组和中断的触发模式中断优先级。主要是存储用户注册中断处理函数。原创 2023-07-29 17:12:31 · 274 阅读 · 0 评论 -
【RTT驱动框架分析00】-应用层函数调用流程-串口为例
RTT内部有一个全局变量数组rt_object_container数组的数量就是 rt_object_info_type 内核对象的种类,其中包含一个RT_USING_DEVICE (设备的数据类型),数组内部的每一个变量包含一个链表,链表内部就构造了一个设备链表,rt_device_find函数就是在这个数组内部根据类型找到链表,然后在链表内部根据设备名字找到rt_device_t设备。原创 2023-07-29 17:20:29 · 312 阅读 · 0 评论 -
RTT应用编程_iic应用编程
和 SPI 总线的自定义传输接口一样,I2C 总线的自定义传输接口传输的数据也是以一个消息为单位。参数 msgs[] 指向待传输的消息数组,用户可以自定义每条消息的内容,实现 I2C 总线所支持的 2 种不同的数据传输模式。在使用 I2C 总线设备前需要根据 I2C 总线设备名称获取设备句柄,进而才可以操作 I2C 总线设备,查找设备函数如下所示,以下两个读写函数封装自 rt_i2c_transfer() 函数,用于读写I2C从设备的数据,更加简单易用,推荐使用。获取到 I2C 总线设备句柄就可以使用。原创 2023-08-02 22:06:46 · 340 阅读 · 0 评论 -
【N32L40X】学习笔记14-在RT-thread系统中读取eeprom数据
编写eeprom测试源码。原创 2023-08-06 19:21:51 · 709 阅读 · 0 评论 -
RTT学习笔记12-KConfig 语法学习
KConfig 语法学习RTT 官方教程。原创 2023-08-04 23:25:59 · 460 阅读 · 0 评论 -
极海APM32F4xx Tiny】学习笔记08-RTT 链表使用方法
极海APM32F4xx Tiny】学习笔记08-RTT 链表使用方法1.双向链表基本结构2.节点初始化—2个方法3.在某一个节点后边插入一个节点4.在某一个节点前边插入一个节点5.移除一个节点6.判定链表是不是空就是判定是不是自己指向自己7.获取链表长度已知结构体内部一个成员的地址can_dev,根据机构体类型struct ra_can和成员名字can_dev 得到结构体实例对象can的地址8.获取结构体的入口地址9.遍历整个链表10.已知成员的地址遍历整个链表原创 2023-07-29 17:07:04 · 257 阅读 · 0 评论 -
瑞萨RA系列mcu学习笔记--RTT-pwm驱动
通用 PWM 定时器(GPT,General PWM Timer)是 RA MCU 的其中一种 32/16 位的定时器外设。在 GPT 当中,可分为 GPT32 和 GPT16,它们最主要的区别是计数器的不同定时器(Timer)最基本的功能就是定时,比如定时发送串口数据、定时采集 AD 数据、定时触 发中断处理其它事务等等。如果把定时器与 GPIO 引脚结合起来使用的话可以实现更加丰富的功 能,可以对输入信号进行计数,可以测量输入信号的脉冲宽度,可以输出单个脉冲、PWM 等波 形,等等。原创 2023-06-16 21:09:38 · 1182 阅读 · 0 评论 -
RTT外设驱动使用2--ADC串口添加
1. 配置KConfig文件 2. 打开menuconfig选中ADC外设 3. 保存配置生成mdk工程 4. 修改CubuMX原创 2022-08-12 22:19:55 · 500 阅读 · 1 评论 -
RTT外设驱动使用1--串口添加
RTT外设驱动使用1--串口添加。原创 2022-08-12 21:29:09 · 747 阅读 · 0 评论 -
RTT学习笔记11- gpio使用和GPIO设备驱动框架层
gpio使用和GPIO设备驱动框架层原创 2022-08-06 18:28:28 · 582 阅读 · 0 评论 -
RTT学习笔记10- 设备IPC 完成量-ringbufffer-workwueue
设备IPC 完成量-ringbufffer-workwueue原创 2022-08-06 17:12:23 · 545 阅读 · 0 评论 -
RTT学习笔记9-IO设备模型
分成三层,从上到下分别是层实现了对设备驱动程序的封装。是对硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。...原创 2022-08-06 16:20:23 · 340 阅读 · 0 评论 -
RTT学习笔记8-RTT内核移植
线程A运行过程中产生PendSV中断,进入中断函数之前硬件保存当前线程的 PSR、PC、LR、R12、R3-R0 ,进入中断函数后软件/手动保存 R11~R4 寄存器,接下来恢复线程B的R11~R4 寄存器,退出中断,硬件完成线程B的 R0~R3、R12、LR、PC、PSR 寄存器。1) rt_hw_context_switch_to():没有来源线程,切换到目标线程,在调度器启动第一个线程的时候被调用。2) rt_hw_context_switch():在线程环境下,从当前线程切换到目标线程。......原创 2022-08-06 13:24:26 · 646 阅读 · 0 评论 -
RTT学习笔记7-中断管理
rtt中断处理原创 2022-08-06 10:40:20 · 1008 阅读 · 0 评论 -
【RT_Thread学习笔记】---以太网LAN8720A Lwip ping 通网络
RT-Thread 以太网ETH lan8720A,lwip ping原创 2022-08-02 22:29:09 · 1567 阅读 · 1 评论 -
RTT Nano+STM32F407ZGT6+LAN8720A+LWIP+CubeMX+MDK
1. 创建stm32工程2. 配置时钟时钟树程序下载、时间基调试串口3.配置ETH外设和重映射io和复位引脚4. 配置PHY外设5. 配置lwip6. 配置rt-thread没有rtt 包请参考https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil添加rtt nano配置rtt nano开启所有的ip原创 2021-11-09 17:52:17 · 664 阅读 · 2 评论 -
探索者STM32F407ZGT6+LWIP+LAN8720A_FREERTOS CubxMx配置教程
1. cubumx创建STM32F407ZGT6工程2. 配置时钟配置外部时钟## 配置程序下载口和hal库时基3. 配置ETH外设和复位脚配置stm32 外设配置网卡芯片数据4. 配置lwip5. 打开freeRtos打开就行不需要配置其他6. 添加网卡复位代码 HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3,GPIO_PIN_RESET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_原创 2021-11-09 16:42:56 · 816 阅读 · 0 评论 -
RTT学习笔记6-内存管理
1. RT-Thread 中的两种内存管理方式动态内存堆管理静态内存池管理2. 存分配管理算法内存堆管理内存池管理内存堆管理第一种是针对小内存块的分配管理(小内存管理算法);第二种是针对大内存块的分配管理(slab 管理算法);第三种是针对多内存堆的分配情况(memheap 管理算法)RT-Thread 将 “ZI 段结尾处” 到内存尾部的空间用作内存堆小内存管理算法主要针对系统资源比较少,一般用于小于 2MB 内存空间的系统;而 slab 内存管理算法则主原创 2021-11-07 14:53:01 · 882 阅读 · 0 评论 -
mdk cubemx 移植RT-Thread Nano 至stm32f424zgt6
1. CubeMX 的配置配置时钟,我的时钟是8MHz配置调试串口,我的板子调试串口是UART8配置RTT配置gpio 控制LED 3个配置串口3中断DMA方式接收数据配置中断的代码生成调试下载口配置2. mkd配置包含 finsh_config.h 文件 在rtconfig.c文件中修改启用堆内存 在rtconfig.c文件中修改否则动态创建内核对象时候就会报错修改调试串口 在board.c文件中修改使用rtt包含 rt原创 2021-11-07 12:03:32 · 182 阅读 · 0 评论 -
RTT学习笔记5-线程间的通讯邮箱-消息队列-信号
邮箱邮箱基本知识邮箱中的每一封邮件只能容纳固定的 4 字节内容非阻塞方式的邮件发送过程能够安全的应用于中断服务中,是线程、中断服务、定时器向线程发送消息的有效手段当一个线程向邮箱发送邮件时,如果邮箱没满,将把邮件复制到邮箱中,如果满了,要么阻塞等待,要么超时。邮件的接收,没有邮件就要阻塞等待或超时等待RT_EFULL //邮箱满了RT_ETIMEOUT //等待超时邮箱结构struct rt_mailbox{ struct rt_ipc_object parent;原创 2021-10-27 13:47:51 · 1261 阅读 · 0 评论 -
RTT学习笔记4-线程同步
基本概念同步是指按预定的先后次序进行运行在访问临界区的时候只允许一个 (或一类) 线程运行进入 / 退出临界区的方式1)调用 rt_hw_interrupt_disable() 进入临界区,调用 rt_hw_interrupt_enable() 退出临界区;详见《中断管理》的全局中断开关内容。2)调用 rt_enter_critical() 进入临界区,调用 rt_exit_critical() 退出临界区。信号量信号量是一种轻型的用于解决线程间同步问题的内核对象,线程可以获取或释放它,原创 2021-10-23 17:56:07 · 488 阅读 · 0 评论 -
RTT学习笔记3-时钟定时器管理
基本知识RT-Thread 中,时钟节拍的长度可以根据 RT_TICK_PER_SECOND 的定义来调整,等于 1/RT_TICK_PER_SECOND 秒获取时钟节拍rt_tick_t rt_tick_get(void);定时器分类硬件定时器软件定时器触发方式分类单次触发周期触发HARD_TIMER 模式HARD_TIMER 模式的定时器超时函数在中断上下文环境中执行,可以在初始化 / 创建定时器时使用参数 RT_TIMER_FLAG_HARD_TIMER 来指定。对原创 2021-10-23 15:56:54 · 844 阅读 · 0 评论 -
RTT学习笔记2-线程
*系统中总共存在两类线程,分别是系统线程和用户线程,系统线程是由 RT-Thread 内核创建的线程,用户线程是由应用程序创建的线程*RT-Thread 的线程调度器是抢占式的线程基本知识控制结构/* 线程控制块 */struct rt_thread{ /* rt 对象 */ char name[RT_NAME_MAX]; /* 线程名称 */ rt_uint8_t type; /* 对象类型 */ rt原创 2021-10-23 13:00:56 · 611 阅读 · 0 评论 -
RTT Studio和Cubemx联合开发
1. RTT studio创建工程创建工程## 创建完成以后的目录结构2. 配置CubuMx双击cubumx的图标打开CubeMx配置时钟生成代码构建后的代码结构编译代码满屏错误:不要慌3. 新增脚本新建scons脚本文件 SConscript脚本内容如下import osfrom building import *cwd = GetCurrentDir()src = Glob('*.c')# add cubemx driverssrc = Split('''原创 2021-10-22 11:16:08 · 931 阅读 · 1 评论 -
RTT 操作片上flash
1、在Kconfig文件中添加如下内容2、在menuconfig中选中spi3、测试代码#include <rtthread.h>#define STM32_FLASH_BASE_ADDR 0x8000000#define DEST_ADDDR STM32_FLASH_BASE_ADDR+100*1024int test_flash(){ rt_u...原创 2020-01-15 17:33:16 · 1579 阅读 · 3 评论 -
RTT添加AD驱动代码
1、在Kconfig文件中添加如下内容menuconfig BSP_USING_ADC bool "Enable ADC" default n select RT_USING_ADC if BSP_USING_ADC config BSP_USING_ADC1 bool ...原创 2020-01-15 15:50:11 · 849 阅读 · 0 评论 -
移植RTT使用cubeMx配置后出现 cannot open source input file "stm32f1xx_hal_exti.h": No such file or directory
问题原因;因为官方的f1HAL库存在没有"stm32f1xx_hal_exti.h"文件,解决办法:从cubuMx生成的工程内部复制一个"stm32f1xx_hal_exti.h" 到RTT 源码内部包含的Hal库...原创 2020-01-15 14:25:00 · 2589 阅读 · 0 评论 -
RTT 使用menuconfig 和cubeMux 在移植过来的模板工程上增加一个串口2
1、在board目录下Kconfig文件中增加如下内容打开CubeMX_Config下的CubeMX_Config.ioc的cubeMx工程a;使能串口1;b;使能外部时钟,设置时钟树;1工程名字必须是CubeMX_Config下图是新增串口的配置代码生成后会出现编译不过的情况解决办法是添加一个 stm32f1xx_hal_conf.h参看...原创 2020-01-15 14:12:27 · 651 阅读 · 0 评论