自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (7)
  • 收藏
  • 关注

原创 基于STM32的0.96寸OLED显示屏(模拟SPI)

OLED,即有机发光二极管( Organic Light Emitting Diode)。 OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快,可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

2020-11-10 14:47:26 10210 14

原创 基于STM32读取W25Q64(模拟SPI)

配置SPI使用的GPIOspi.h#ifndef _SPI_H#define _SPI_H#include "stm32f10x.h"#define SPI_CS_CLK RCC_APB2Periph_GPIOA#define SPI_CS_Pin GPIO_Pin_0#define SPI_CS_PORT GPIOA#define SPI_CLK_CLK RCC_APB2

2020-10-19 21:29:48 4807 1

原创 基于STM32的模拟SPI通讯

1.SPI协议介绍SPI协议是由摩托罗拉公式提出的通讯协议(Serial Peripheral Interface串行外设接口),是一种高速全双工的通信总线。SPI通讯使用3条总线(SCK、MOSI、MISO)和片选线CS。CS:片选线也叫NSS,当有多个SPI设备与SPI主机相连时,设备的其他信号线SCK、MOSI、MISO同时并联到相同的SPI总线上(无论由多少个从设备,都共用这3条总线),而每个从设备都有独立的CS片选线,有多少个从设备就有多少个CS线。SPI通讯无设备地址,当主机要选择从设

2020-10-08 18:02:44 4572 5

原创 STM32F10xxx调试接口

该系列芯片支持两种调试接口:1、JTAG调试接口(JTAG-DP)2、串行调试接口(SW-DP)调试接口用到了一下引脚:如果我们需要用到这5个IO口,我们就需要改变调试模式:配置的是复用重映射和调试I/O配置寄存器(AFIO_MAPR)寄存器的SWJ_CFG[2:0]位Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRSTGPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);GPIO_PinR

2020-05-18 21:06:08 1275

原创 柔性数组介绍

在结构体中存放一个动态长度的字符串有两种方法:指针和柔性数组。柔性数组:运行结果

2022-06-13 15:26:58 148 1

原创 I/O多路转接

什么是I/O多路转接?对大量的文件描述符进行I/O事件监控。IO事件包括:可读事件、可写事件、异常事件函数selectint select( int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout );参数nfds:在下面3个文件描述符集中找到最大的文件描述符,然后+1。参数readfds和writefds和exceptfds:描述符集的指针,可以将它看成是一个数组。这3

2022-05-20 17:46:28 2570

原创 getline

getlinegetline源码,根据源码编写自己的getline函数,只保留核心功能,。#define GETDELIM_GROWBY 64/** * @brief 读取一行数据 * * @param lineptr 数据存放缓冲区 * @param n lineptr的大小 * @param stream * @return ssize_t 成功返回读取到的数量,失败返回-1 */ssize_t mygetline( char **lineptr, size_t *n, FIL

2022-05-01 21:01:14 612

原创 文件IO缓冲

文件I/O缓冲系统I/O调用和C语言库I/O函数在操作磁盘文件时会对数据进行缓冲介绍read() 和 write() 调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区和内核缓冲区高速缓存之间复制数据。在后续某个时刻,内核会将其缓冲区的数据刷新到磁盘。当把缓冲区中的数据取完,这时内核会将文件的下一段内容读入缓冲区。采用这一设计,使 read() 和 write() 调用的操作更为快捷。Linux 内核对缓冲区的大小没有固定上限。受限于:物理内存总量处于其他目的对物理内存的需求

2022-04-24 12:12:14 206

原创 Linux内存映射

内存映射按文件分:文件映射:将一个文件的一部分直接映射到调用进程的虚拟内存中匿名映射:没有对应文件,被映射的分页会初始化为0按权限分:私有映射:写时复制,变更不会再底层文件进行共享映射:变更发生在底层文件将上面两两组合:私有文件映射:使用一个文件的内容来初始化一块内存区域私有匿名映射:为一个进程分配新的内存共享文件映射:代替 read() 和 write() 、IPC共享匿名映射:实现相关进程实现类似于共享内存进程执行 exec() 时映射会丢失,但通过 fork()

2022-04-20 20:51:06 1590

原创 System V 共享内存

System V 共享内存fork() 创建的子进程会继承其父进程附加的共享内存段API 函数创建或打开共享内存#include <sys/types.h>#include <sys/shm.h>int shmget( key_t key, size_t, int shmflg );参数 key:由 IPC_PRIVATE 或 ftok() 生成的键参数 size:表示需分配共享内存的字节数内核是以系统分页大小的整数被来分配共享内存的,所以会 size 会被提

2022-04-19 10:03:57 139

原创 System V 信号量

System V 信号量API 函数创建或打开一个信号量集#include <sys/types.h>#include <sys/sem.h>int semget( key_t key, int nsems, int semflg );成功返回信号集的标识符参数 key:由 IPC_PRIVATE 或 ftok() 返回的键参数 nsems:创建信号集时:nsems 指定信号量的数量,必须大于0获取信号集时:nsems 必须小于等于集合的大小参数 s

2022-04-16 14:35:30 1112

原创 ELF目标文件分析

ELF目标文件分析源代码#include <stdio.h>int printf( const char* format, ... );int global_init_var = 84;int global_unint_var;void func1( int i ){ printf( "%d\n", i );}int main( void ){ static int static_var = 85; static int static_var2

2022-04-12 16:25:29 329

原创 System V 消息队列

消息队列创建消息队列#include <sys/types.h>#include <sys/msg.h>int msgget( key_t key, int msgflg )成功返回消息队列的标识符,它是消息队列的句柄。失败返回-1和设置error参数 key 是一个键,用于生成唯一的标识符。可由 IPC_PRIVATE或 ftok() 生成。参数 msgflg 是权限位和下面这些位组成:IPC_CREAT:没有于指定 key 对应的消息队列,则新建一个I

2022-04-12 10:56:00 668

原创 Keil的编译器优化级别和调试视图

Keil的编译器优化级别和调试视图Compiler User Guide: Compiler optimization levels and the debug view编译器执行的精确优化取决于选择的优化级别,以及您是针对性能还是代码大小进行优化。编译器支持以下优化级别:0最小优化。 关闭大多数优化。 启用调试时,此选项可提供最佳调试视图,因为生成的代码的结构直接对应于源代码。 所有干扰调试视图的优化都被禁用。 特别是:断点可以设置在任何可到达的点上,包括死代码。变量的值在其范围内的任何地

2021-11-20 11:41:56 2462

原创 vTaskNotifyGiveFromISR源码分析

以STM32平台为例,在STM32中数值优先级越低,逻辑优先级越高。 void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) { TCB_t * pxTCB; uint8_t ucOriginalNotifyState; UBaseType_t uxSavedInterruptStatus; configASSERT( xTaskToNotify ); (

2021-11-18 20:24:17 949

原创 FLASH预取

FLASH预取在stm32中,我们的代码都是放在flash中的,内核是M3,内核要读flash中的code,它是一条一条读一条一条执行的。读完第一条,还没读第二条代码时,内核先会把将要读的读的第二条代码先取好,放好等待它去读,这个过程称为预取指。Cortex处理器采用的是三级流水线的哈佛结构,一条指令的执行分为:取指阶段(Fetch stage)、译码阶段(Decode stage)、执行阶段(Execute stage)。CPU 通常需要 4 个周期( 72Mhz下, 2 个等待周期)读取 64

2021-11-09 22:05:09 3032

原创 3. 无重复字符的最长子串

滑动窗口解题思路left 和 right 都处于最左边指向right 不断向右遍历直到末尾(在遍历期间遇到了重复的元素 right 就停下来,然后 left 开始向右遍历直到删除重复的元素,然后 right 继续向右遍历)在遍历期间不断更新最长子串的长度代码class Solution {public: int lengthOfLongestSubstring(string s) { int ret = 0; int left = 0;

2021-08-22 13:45:51 69

原创 LVGL v7移植到ARM平台

本次移植的是LVGL v7.110硬件平台:野火IMX6ULL参考博客:实践分享 | 基于framebuffer的lvgl的移植使用_嵌入式大杂烩-CSDN博客⭐建立一个lvgl项目 — 百问网LVGL系列教程 1.0 文档 (gitee.io)1 下载所需要的仓库git clone git://github.com/lvgl/lvgl.git -b v7.11.0 #官方图形库git clone git://github.com/lvgl/lv_drivers.git -b v7.11..

2021-06-12 19:49:17 755 1

原创 freetype显示中英文

freetype显示中英文参考博客:04.freetype显示中文_//查无此人的博客-CSDN博客_freetype 中文freetype的安装与使用_explore_world的博客-CSDN博客_freetype安装 使用freetype来显示中文汉字和英文字符_mlove编程-CSDN博客3.数码相框-通过freetype库实现矢量显示 - 诺谦 - 博客园 (cnblogs.com)1 安装freetypefreetype-2.10.0.tar.gz链接:https://pan.b

2021-05-15 16:31:17 914

原创 modbus-tk学习笔记

对于modbus ASCII 模式,使用的是高位字节在前,低位字节在后。使用LRC校验。对于modbus rtu 模式,使用的是低位字节在前,高位字节在后。使用CRC校验。参考博客:modbus 入门篇,不冗长,很好理解!MODBUS学习笔记——modbus tk modbus TCP主机实现_物联网 IoT 经验分享-CSDN博客_modbus_tkmodbus协议中的寄存器理解0.前言modbus是一种古老但是高效的应用层协议。在嵌入式和PC机领域有多种方法实现modbus协议栈,mo.

2021-05-15 15:38:45 6944 5

原创 AT24C02数据存储

一、引脚说明WP:当该引脚接GND时可读可写,接Vcc只读。二、器件地址开发板原理图:所以器件写地址为0xA0,读地址为0xA1。三、写操作

2021-01-15 19:17:51 1003

原创 模拟IIC(HAL库)

有关IIC的详细教程请看博主的另一篇文章本文只展示HAL库代码 /** * @brief 初始化IO * @param 无 * @retval 无 */void IIC_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitStruct; IIC_GPIO_CLK_ENABLE(); GPIO_InitStruct.Pin = IIC_SCL_PIN | IIC_SDA_PIN;

2021-01-06 17:24:12 2724

原创 模拟IIC(基于STM32)

话不多说,直接讲代码GPIO配置STM32的8种引脚模式void IIC_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOx,ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Pin = IIC_SCL_Pin|IIC_SDA_Pin; GP

2021-01-04 10:55:48 4779 4

原创 Makefile的使用

什么是MakefileMakefile是编译工程的工具,包含以下两部分:make工具:可以找出项目里修改过的文件和受修改文件影响的其他文件进行单独编译,避免重复编译。Makefile文件:存放文件之间的依赖关系和编译规则

2020-12-08 16:23:53 390

原创 Ubuntu无法进入共享文件夹

项目场景:使用Linux的cd命令进入共享文件夹问题描述:提示权限不够bash: cd: dir_share/: 权限不够原因分析:使用ls -l命令查看共享文件夹权限drwxrwx--- 1 root vboxsf 0 12月 4 23:30 dir_share得知dir_share文件夹属于root用户,vboxf用户组,而其他用户没有权限,所以我们无法进入共享文件夹。解决方案:将自己登录的用户,添加到vboxsf组中。sudo adduser 你的用户名 vb

2020-12-05 00:29:23 1671

原创 Keil编译错误总结

Keil编译错误总结warning: #223-D: function "xxxxx" declared implicitlywarning: #223-D: function “xxxxx” declared implicitly没有找到xxxxx函数:函数名和头文件里的声明函数名不匹配 (更改函数名后忘记更改头文件里面的函数声明)没有在keil里声明头文件所在的位置...

2020-10-31 16:26:31 397

原创 STM32屏蔽SysTick中断服务

SysTick_Config(uint32_t ticks);库函数是用来定义重装载值的,我们来看下它的详细信息。该库函数在在 core_cm3.h中被定义。static __INLINE uint32_t SysTick_Config(uint32_t ticks){ if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */

2020-05-19 22:09:31 3653 2

原创 STM32 SysTick两种定时设计

方案1:void SysTick_Init(void){ if (SysTick_Config(SystemCoreClock / 100000)) // SystemCoreClock / 100000 重装载值为720,CLK为72M,所以720/720M=10us中断一次 { /* Capture error */ while (1); }}void Delay_10us(__IO u32 nTime){ TimingDelay = nTime; // 使能滴答定

2020-05-19 21:51:44 364

模拟IIC-HAL库.7z

STM32基于HAL库的模拟IIC

2021-01-06

OLED(模拟SPI).7z

基于STM32F103的0.96寸OLED显示

2020-11-10

32读取W25Q64整数和小数(模拟SPI).7z

32读取W25Q64整数和小数 模拟SPI

2020-10-30

基于STM32F103的模拟SPI

基于STM32F103的模拟SPI

2020-10-18

S3C2440全套中文手册.7z

S3C2440全套中文手册

2020-08-07

HC05蓝牙模块.7z

HC05与串口2进行通信,串口1用于打印到电脑的串口调试助手,使用前请确保USART2的波特率与HC05蓝牙波特率保持一致 PB6用于连接Key按键

2020-06-04

矩阵按键1~16串口显示.zip

F103ZET6的4X4矩阵键盘,对应1-16,并且可以串口发送到电脑显示,

2019-08-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除