- 博客(46)
- 资源 (1)
- 收藏
- 关注
原创 蓝牙协议栈之L2CAP使用
本文记录对蓝牙协议栈逻辑链路及自适应协议层的学习还有后面如何在TI的蓝牙芯片上去实现L2CAP CoC的数据透传,为什么用L2CAP CoC进行数据透传呢?因为它每次透传的数据量远远能比GATT大,如果堆够用的话可以传输64KB,而GATT数据透传限于ATT-MTU,最多每次能传输的也就247个字节。使用L2CAP总结如下:主机和从机都可以请求建立L2CAP COC通道。一旦L2CAP连接建立成功之后,协议栈会发送到应用层,具体的事件是,这个是双方都会触发的事件。
2023-05-07 12:35:15
2181
原创 SPI+DMA传输性能比较
第一次我是以SPI+DMA驱动LCD显示240X82的图片,可以看出显示该图片在有DMA(加DMA中断)的加持下,耗时156us。第二次是我单独用SPI驱动LCD显示240X82的图片,耗时8685us,所以区别还是蛮大的。本文章仅仅简单记录32单片机的SPI+DMA驱动显示屏的性能测试,这里不花费时间介绍SPI和DMA。这里我定时器计数频率分频到1Mhz,最大计数50000次,也是就计数频率1us,周期50ms。(2)SPI的读写接口(非DMA情况下需要使用到)(3)SPI的DMA配置初始化。
2023-02-19 01:27:49
3311
原创 CC2642获取主机RSSI值
本篇文章记录使用CC2642作外设,连接手机,获取手机蓝牙的RSSI信号强度。本次的实验是在ProjectZero例程基础上编写实现的,我的思路是打算周期性的读取RSSI值,所以我会先定义一个定时器,然后再定时器的回调事件中去发送读RSSI的命令。本实验获取RSSI的步骤如下:2.初始化一个定时器3.定时器回调函数的编写4.等待事件的处理 在函数ProjectZero_taskFxn中加入一下的语句:5.查看Read Rssi命令的完成处理: 上面的这个Read Rssi命令的完成
2022-10-07 16:05:14
641
原创 RT_thread的IIC设备学习笔记
目录前言1 IIC简介2 RTthread IIC总线设备API3 IIC总线设备应用实践前言本笔记记录了RT_thread系统IIC总线设备的学习,包括简单总结IIC工作原理、API函数的解读和应用。提示:以下是本篇文章正文内容,下面案例可供参考1 IIC简介IIC是嵌入式开发中较常见的总线协议,协议包含两条线,一条时钟线和数据线,实现半双工双向通信。IIC有从主设备之分,并且允许总线上同时存在多个主设备,但是不同时使用,每个挂载在总线上的设备都有唯一的地址,主设备启动数据传输并产生时钟信号,
2022-08-07 01:09:19
2973
1
原创 RT_threadのSPI设备驱动W25Q/NM25Q128
本篇文章记录利用RTthread的SPI设备来驱动NM25Q,熟悉RTthread的SPI设备。另外对SPI flash(NM25Q/W25Q)不做介绍,仅仅是按照手册上的时序编写代码。NM25Q和W25Q基本上是一样的,只不过是设备厂商ID不一样。本次用的是一颗NM25Q128芯片做实践。1 将NM25Q挂载到SPI总线上/*先定义一个SPI设备对象*/struct rt_spi_device * sp.
2022-04-16 14:27:29
2609
原创 RT_threadのSPI设备学习笔记
前言 SPI作为基本的通信协议,广泛应用在嵌入式产品中,它是一种高速、全双工、同步通信总线,目前接触的较多的是SPI、QSPI,Dual SPI暂时没接触到,这里不对SPI总线基础知识做记录,本文仅仅是Rt_thread系统下的SPI设备学习笔记,学习RT_thread中对SPI设备的封装,从其设备驱动层、设备框架驱动层以及应用层入手学习,最终实现使用stm32的SPI驱动LCD显示屏,用Q
2022-03-17 22:22:00
1561
原创 Rt_threadのADC设备学习笔记
ADC(Analog to Digital Converter)模数转换器,它的作用是将外界的模拟信号转化为离散数字信号,什么是外界的模拟信号呢?比较好理解,例如温湿度,无线信号的RSSI强度,声光,角度等等。对于一些低端的微控制器,片上只能依靠另外的ADC转换芯片实现模拟信号的采集,对于一些好一点的单片机,基本上都拥有片上ADC资源。ADC的转换一般过程是:取样->保持和量化->数字编码。 本文为RT_thread操作系统下的ADC设备学习笔记
2022-03-14 22:39:25
7224
原创 RT_threadの自动初始化机制
目录前言1. 程序的内存分布2.自动初始化机制2.1 自动初始化原理解析2.2 实践测试自动初始化前言 在刚开始学习单片机嵌入式时,我们初始化一些外设资源都是直接在while(1)前面调用外设的初始化函数,这样写虽然可以清楚的看到系统中用到了哪些外设,但是如果外设很多的话,一连续的初始化函数看起来就有点不舒服。而在RT_thread中存在自动初始化机制,它的原理就是用一个函数表,将要初始化的函数指针加入该表中,遍历该表执行每一个初始化函数。本文记录学习RT_thread的自动初始化机制。1. 程序的
2022-03-14 20:13:55
1736
原创 RT_threadのUART设备学习笔记
前言串口,做嵌入式都会使用到,那么我们这一节记录学习下rt_thread系统中的UART设备。RT_thread提供下面的I/O设备管理接口来访问串口硬件:函数描述rt_device_find根据串口设备名称查找设备获取设备句柄rt_device_open打开设备rt_device_read读取数据rt_d.
2022-03-09 00:33:43
1642
原创 RT_Thread的PIN设备学习笔记
文章目录总结一、pandas是什么?二、使用步骤1.引入库2.读入数据总结总结RT_thread提供了下面的几个函数(PIN设备管理接口)来访问GPIO,如下:函数描述rt_pin_mode()设置引脚模式rt_pin_write()设置引脚电平rt_pin_read()读取引脚电平rt_pin_attach_irq()绑定引脚中断回调函数rt_pin_irq_enable()使能引脚中断rt_pin_detach_irq()脱离引脚中断
2022-03-07 22:41:13
5560
原创 RT_threadのIO设备学习笔记
总结:RT_thread有一套I/O设备模型框架,如下图: 图1 I/O设备模型框架 设备驱动通过函数rt_device_register将自己注册到IO设备管理器。应用程序可以使用函数rt_device_find查找设备;使用函数rt_device_open打开设备;使用函数rt_device_read读取设备数据;使用函数rt_device_close关闭设备。 RT_thread的设备模型是建立在内核对象模型基础之上的,每个设备都有继承关系,如图:图2 设备继承关系IO设备内核代码解析
2022-03-06 19:45:26
1431
原创 【无标题】
Shell:计算机语义命令解释器(1)开启一个终端:CTR+ALT+T(2)关闭一个终端:ALT+F4(3)shell提示符 #:一般表示你是超级用户,root $:一般表示你是普通用户 怎么切换用户? 答:sudo su 从当前的用户切换为Root用户 su user 从Root用户切换为普通用户,其中的user是安装时候用的用户名 或者直接输入exit,也可以Ctrl+D组合键退出Root用户(4)清除屏幕:Clear 快捷键:CTR+L(5)查看你当前所在位置:PW
2022-02-27 22:38:29
528
原创 ARM单片机工程之间的切换
typedef void (*func)();void hw_board_init(void);void Project_Jump(uint32_t addr){ func func_ptr; SysTick->CTRL = 0;// __disable_irq(); for(uint8_t i=0;i<8;i++) { NVIC->ICER[i] = 0xFFFFFFFF; NVIC->ICPR[i] = 0xFFFFFFFF; } __DSB();
2022-02-22 23:35:58
610
原创 W25Q128数据手册阅读总结
W25Q128数据手册总结:1.描述2.引脚封装3.明白引脚的功能4.了解W25Q的内存结构框架5.了解相关寄存器6.了解指令7.了解标准SPI的SPI模式8.了解SPI的dual模式9.了解SPI的QPI模式10.常用的指令1.描述 W25Q128FV串行Flash内存由可编程的65536页组成,每一页256字节。可以在一时间编程高达256字节的内存。擦除内存可以是按16个页擦除(即一个Sector),128个页擦除(八个Sector),256个页擦除(16个Sector),或者整片擦除。标准S..
2021-12-21 00:48:38
37172
6
原创 关于DMA不能工作的原因
ARM芯片中,有TCM和CCM高速内存TCM,Tightly Coupled Memories,是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能,相比于cache的优点是,程序代码可以精确地控制什么函数或代码放在哪儿(RAM里)。当然TCM永远不会被踢出主存储器,因此,他会有一个被用户预设的性能,而不是象cache那样是统计特性的性能提高。TCM对于以下几种情况的代码是非常有用、也是需要的:可预见的实时处理(中断处理)、时间可预见(加密算法)、避免cache分析(加密算法)、或
2021-12-08 21:34:52
2785
3
原创 FATFS函数使用笔记
1.FRESULT f_opendir(DIR *dp,const TCHAR *path);功能:打开一个目录参数功能dp指向空目录对象结构体的指针,用来存储即将打开的目录信息path路径返回值FR_OK(0)表示函数执行成功,目录对象结构体被创建,以供后面的读目录调用。参数dp的结构体类型如下:typedef struct { _FDID obj; /* Object identifier ,里面有个objsize记录打开文件字节大小*/ DWORD
2021-09-18 17:28:12
1489
原创 Rtthread之串口初始化流程分析
首先单步调试进入的是rtthread_startup(void)函数,使用函数rt_hw_interrupt_disable(void)失能全局中断,然后进入rt_hw_board_init(void)函数。在该函数中可以看到:#ifdef RT_USING_SERIAL stm32_hw_usart_init();#endif 如果在rtconfig.h文件中定义了RT_USING_SERIAL,则执行硬件串口初始化。下面第一张图是整理了串口设备结构体变量的配置(不是直接将参数赋值给
2021-06-26 15:42:43
2136
原创 FSMC之NOR flash控制器学习笔记
一、FSMC基础知识学习FSMC,即灵活的静态存储控制器。先看下面的FSMC框图。从上图可以了解到stm32内核访问FSMC控制器完全是通过AHB总线来实现,同时可以了解到FSMC内部有两个存储控制器,分别是NOR存储器、NAND/PC卡存储控制器,注意两个控制器公用FSMC地址线和数据线,而其中地址线26条,可以访问64MByte的内存,另外数据读写最多支持16位。再来看看下面的内存映射图:上图展示了stm32寻址的1GB内存,这块内存的起始地址是0x60000000,结束地址是0x9FFF
2021-06-19 00:12:43
2440
原创 STM32硬件SPI做从设备笔记
void spi2_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_A
2021-04-19 01:17:52
2433
原创 NRF24L01双向传输(一对一)
@ NRF24L01双向传输(一对一)简介· 实物(模块非单独芯片):· 芯片引脚定义说明(芯片):· 数据包格式:这里没必要介绍NRF24L01了,相信要用这芯片或者模块的朋友应该提前了解过了。· 寄存器表该芯片有命令寄存器和功能寄存器。在使用每一款芯片之前,要养成查看数据手册的习惯。这是我自己边看边翻译的,可能有翻译地不对的,见谅。命令寄存器表:命令名命令字#数据字节操作R_REGISTER000A AAAA1到5,低位在前读命令/状态寄存器W
2021-03-01 00:07:00
5445
2
原创 软件模拟IIC驱动程序
简介:1.IIC写时序中,主机向从机写入数据后都需要等待应答,保证每次写入成功。2.IIC读时序中,主机接收从机除了最后一个数据不用发送应答之外,其他都需要发送应答。void IIC_Start(void){ SDA_OUT(); //SDA输出 IIC_SDA(1); //SDA_高 IIC_SCL(1); //SCL_低 IIC_Delay(); //延时tSU IIC_SDA(0); //SDA_低 IIC_Delay()
2021-02-16 22:05:11
1044
4
原创 好用的SYSTICK
好用的Systick在core_cm3.h和core_cm4.h头文件里边都有Systick滴答定时器的配置函数。/** * @brief Initialize and start the SysTick counter and its interrupt. * * @param ticks number of ticks between two interrupts * @return 1 = failed, 0 = successful * * Initialise the
2021-02-16 12:41:19
350
1
原创 STM32时钟树总结和时钟配置
总结STM32时钟树和时钟配置预习:(1)5到6个时钟源,HSI、HSE、LSI、LSE、MSI、PLL(细分为主PLL、PLLI2S和PLLSAI)。(2)LSI频率为32KHz左右,仅供看门狗和RTC使用。(3)LSE频率为32.768KHz,作为RTC的时钟源。(4)HSE:OSC_OUT和OSC_IN引脚接4~26MHz的晶振。(5)HSI是高速内部RC振荡器,频率16MHz。(6)MSI(暂时看到它出现在低功耗单片机里),时钟信号由内部RC振荡器产生。其频率范围可以由时钟控制寄存器(
2021-02-16 00:07:57
2002
原创 自学Matlab基础语言笔记
1.Matlab的变量命名规则:变量的名称是由一个字母开头,后面可以是字母、下划线、数字。2.变量的初始化有三种方法:采用赋值语句初始化变量;用input函数从键盘输入数值;最后一个是matlab已经定义好的一些常量。用input函数的时候注意打印的消息要用英文单引号括起来,不像C语言的printf函数,比如:>>R = input('please input a data:...
2020-01-19 23:55:18
6196
原创 KEIL5编译51单片机程序依赖包
安装KEIL5成功后,打开51单片机程序很多按钮都是灰色,或者编写51单片机程序的时候不能预编译,此时需要下载51单片机PACK包,要么去官网下载(但是要填写个人信息很烦),网上的答案几乎就是这个,要么就是要C币下载(有点坑),刚才帮舍友搞了下,幸好发现我百度云上有C51依赖包,所以在这里分享给大家:https://pan.baidu.com/s/1qVXVi1-Aj-6UzRCFsl1IOQ...
2019-12-25 17:34:58
7240
14
原创 直流电机PID调速
文章写的是基于数字PID控制器的闭环电机速度控制系统,系统以STC89C51单片机为控制核心,通过电机驱动L298N(这里因为所用电机是个小马达,额定电流和堵转电流不算大,所以用的是TC1508S做驱动)控制电机转速,电机转速控制采用PWM控制。在对电机转速进行调速的过程同时,单片机对电机的转速进行实时采集,并在LCD1602显示屏上实时显示电机实际转速。由于PID参数整定的需要,在设计中利用按键...
2019-12-07 11:19:32
15357
12
原创 51单片机定时器2做串口波特率发生器
利用定时器计数器2作为串口波特率发生器(reg52.h文件缺少对T2CON的定义,需自己定义,在reg52.h头文件加sfr T2CON = 0xC8;)。程序如下:#include "reg52.h"#include "intrins.h"#include "stdio.h"#define u8 unsigned char#define u32 unsigned int #de...
2019-05-18 22:25:45
8649
3
原创 51单片机驱动RC522模块
最近在某宝上买了一块RC522模块,试玩了下,读写卡正常。想学习使用新的东西时,有必要了解它的工作原理和工作过程,不清楚或者不知道的可以参考相关数据手册和参考文献,在这里为了节省自己的时间,我只对我的51程序做一个小小的笔记~~想要驱动RC522模块对IC卡(这里用的是M1卡型号是S50)进行读写操作,一定要有以下5个步骤:一、寻卡二、防冲突三、选择卡四、验证扇区密码(每个扇区都有密匙A...
2019-05-18 21:55:40
18711
10
原创 AD焊盘直接与敷的铜连接
在绘制PCB板子的最后可能需要通过敷铜把地线连接起来,为了加强地线的流畅性,可以在PCB板子敷的铜膜上放几个焊盘增加Top layer和Bottom layer的地线可靠性。不过有个小问题就是敷完铜后放置焊盘(一般为孔径12mil,外径22mil)没什么错误,但是后来如果改变了铜膜(Polygon)的形状,在铜膜上的焊盘会跟元器件的焊盘采取同样的连接方式与铜膜连接,比如元器件的焊盘与铜膜的连接设定...
2019-04-07 23:38:30
12283
2
PID_Motor.zip
2019-12-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人