自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 问答 (1)
  • 收藏
  • 关注

原创 stm32环境搭建

一、软件安装 (keil)二、stm32系列相关的芯片包三、启动文件1、软件安装 (keil)以管理员运行此软件接着next下一步选择安装路径:pack随便起个名字keil软件完成接着破解Kiell软件1、打开keil软件复制CID序号到——》注册机File——》License Management——》获取CID2、以管理员运行,注册机粘贴到CID位置——》Generate——》获取破击码,复制到——》keil软件的(下图所示)二、stm32系列相关的芯片包

2021-06-27 17:24:58 391 4

原创 stm32定时器输出PWM波的结构体

stm32定时器输出PWM波的结构体一、有哪些定时器能输出PWM波呢?①stm32除了TIM6~TIM7(基本定时器)之外,其他都可以产生PWM波输出、②通用寄存器:TIM2~TIM5,每个定时器都有四个独立通道可以作为:输入捕获、输出比较、PWM输出、单脉冲模式输出③高级定时器TIM1、TIM8可以同时产生7路PWM输出;而通用定时器可以同时产生4路PWM输出,这样STM32最多同时输出30路P。WM输出二、通用定时器输出PWM波工作原理:主要有三个关键值: CNT(计数器当前值)、ARR(自

2021-04-28 09:40:10 595 1

原创 stm32端口复用和重映射

stm32端口复用和重映射一、端口复用1、概念: stm32有很多外设,外设的外部引脚与GPIO复用;也就是说一个GPIO可以重复使用外设的引脚,这个GPIO作为内置外设使用时候,就叫做复用。2、端口复用使用步骤:(以UART1为例,PA9,PA10)①配置GPIO时钟②配置UART1时钟③如何配置相对应的GPIO模式:(查看stm32中文手册)二、端口重映射1、概念: 每个外设都有若干个输入输出引脚,一般这些引脚也是固定不变的,但为了让开发工程师更好的安排引脚和功能的走向,引入了重映射功

2021-04-26 17:51:57 446

原创 stm32之通用定时器

stm32之通用定时器一、定时器有哪些stm32F1xx 一共有八个定时器两个高级定时器+四个通用定时器+两个基本定时器定时器种类位数计数器模拟产生DMA请求捕获/比较通道互补输出特殊应用场景高级定时器(TIM1,TIM8)16向上,向下,向上/向下可以4有带死区控制器紧急刹车,可应用与PWM电机控制通用定时器(TIM2~TIM5)16向上,向下,向上/向下可以4无通用,定时计数,PWM输出,输入捕获,输出比较基本定时器(TIM6,T

2021-04-26 17:07:22 339

原创 stm32---串口(USART)通讯

stm32—串口(USART)通讯一、通讯概述:一个通讯协议大体从4点了解:1、数据传送方式(串行、并行)串行: 数据按位顺序传输,速度慢,占用资源少。如: FSMC并行: 数据各个位同时传输,速度快,占用资源多;如:USART、SPI、ICC2、数据通讯方式(单工、半双工、全双工)单工 : 在任意时刻只能进行一个方向的通讯,即是一个固定的发送设备,另一个固定的接收设备。半双工: 两个设备之间可以收发数据,但不能在同一时刻。全双工: 在同一时刻,两台设备之间可以收发数据。3、数据同步方

2021-04-23 15:24:10 287

原创 stm32之外部中断EXTI和NVIC

stm32之外部中断EXTI和NVIC中断如何配置步骤如下一、初始化用来中断的GPIO口二、初始化EXTI(外部中断)三、配置NVIC(中断优先级)中断控制器四、编写中断函数一、初始化用来中断的GPIO口以GPIOA1为例:void Exti_Init(void){ GPIO_InitTypeDef shank_init; //1、定义GPIOA1的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /

2021-04-21 23:18:04 284

原创 stm32之构建固件库点灯

stm32之构建固件库点灯一、固件库模板:工程文件夹1、DOC :工程说明2、Libraries :固件库3、Project :工程文件4、User :用户程序内部工程文档:1、STARTUP :系统启动文件2、USER :用户程序3、CMSIS :内核配置相关4、DOC :说明文档5、FWLIB :外设相关配置二、构建新固件工程步骤:1、打开KEIL软件,project—》new uvison pro

2021-04-21 23:17:43 244

原创 stm32之寄存器点灯

stm32之寄存器点灯一、以GPIOC13为例点灯三步骤:1、使能GPIOC13所在的时钟2、配置GPIOC13的模式(端口配置寄存器)3、设置GPIOC13的低电平/高点平(输出数据寄存器)二、根据stm32中文手册配置寄存器1、使能GPIOC13所在的时钟:GPIOC13S是在APB2时钟对APB2时钟进行配置使能找到起始地址:0x4002 1000偏移地址:0x18GPIOC时钟在第4位;按位操作 //1、使能GPIOC时钟 *(unsigned int*)0

2021-04-21 23:17:22 1219

原创 Linux之http的libcurl库的安装详解

Linux之http的libcurl库的安装详解1、libcurl概述libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 http://curl.haxx.se/2、库链接: https://github.com/curl/

2021-03-17 20:17:16 536

原创 树莓派之快速扩充SD卡

树莓派之快速扩充SD卡1、终端输入命令df -h,查看发现root分区只有11M可用空间太少。pi@raspberrypi:~ $ df -hFilesystem Size Used Avail Use% Mounted on/dev/root 3.1G 2.9G 11M 100% /devtmpfs 434M 0 434M 0% /devtmpfs 438M 0 438M 0% /dev/shmtmp

2021-03-17 18:24:16 534

原创 树莓派安装mjpg-streamer和启用摄像头

树莓派安装mjpg-streamer1、安装mjpg-streamer支持的库第一步:sudo apt-get install libjpeg8-dev #JPEG支持库sudo apt-get install imagemagick #视频流包sudo apt-get install libv4l-dev #4l是小写"L"sudo apt-get install cmake #下载编译工具2、第二步:下载mjpg-streamer安装包没有git的先安装sudo apt-ge

2021-03-16 11:08:07 658

原创 ubuntu18.04安装ibus-pinyin拼音输入法方法

ubuntu18.04安装ibus-pinyin拼音输入法方法1、安装汉语语言包鼠标依次点击系统设置—》区域和语言—》管理已安装的语言—》添加和删除语言

2021-03-05 21:11:56 1311

原创 新安装的乌班图18.04,scp /drivers/char/pin4driver2.ko pi@192.168.101.132:/home/pi报错问题

scp /drivers/char/pin4driver2.ko pi@192.168.101.132:/home/pi报错问题linfeng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ scp /drivers/char/pin4driver2.ko pi@192.168.101.132:/home/piThe authenticity of host '192.168.101.132 (192.168.101.132)' can't be established.ECDSA

2021-03-04 23:12:47 230 1

原创 字符设备驱动实现二之微机总线物理地址寄存器配置

字符设备驱动实现二之微机总线物理地址寄存器配置一、微机总线物理地址1、总线地址百度百科介绍:地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。总线地址:一句话概括:CPU能够访问内存的范围。一个现象可知:一台电脑装了32位的系统,内存条明明是8G,可是系统只能识别3.8G,而装了64位系统的电脑才能识别8G。由下面数据分析:32位能表示/访问 4,294

2021-03-04 22:44:29 216 3

原创 嵌入式系统内核结构认知与字符设备驱动实现一

一、 嵌入式系统内核结构认知1、内核结构大可分为:用户态、内核态、硬件;三部分组成。2、用户态是怎样调用app一层层进到内核态再到驱动硬件干活的?3、如图:4、简单分析说明:首先在用户态空间;C库提供很多app能够支持内核干活的接口,从而方便应用者开发,比如说,一套应用程式运行下调用open函数到内核会发生一次软中断(中断号为0x80),从用户态进入到内核态;C库的函数调用了系统调用函数(sys_call),然后sys_call再调用虚拟文件系统(VFS)的sys_open函数,从上层函数调用将

2021-03-04 22:44:10 150 2

原创 Linux文件系统认知

Linux文件系统认知1、什么是文件系统?文件系统是操作系统用于明确存储设备组织文件的方法;而这种方法就是文件管理系统(程序),简称文件系统。2、文件系统(文件管理系统的方法)的种类有哪些?种类比如:FAT 、VFAT 、NTFS 、EXT1/2/3/4 、HFS 等格式对于树莓派来说:可以用系统命令查看文件类型(格式):df -Tvfat :boot(bootloader,kernel)ext4 :更目录tmpfs :内存文件系统3、什么是分区?对于windowns来说:

2021-03-02 12:16:20 395

原创 Linux树莓派内核配置以及编译

Linux树莓派内核配置以及编译1、为什么要配置编译内核:为驱动代码做铺垫,驱动底层代码需要一个编译好的内核,编译之前必须配置合适的内核;编译完成后最终生成 .config文件 ,该文件指导Makefile去把又用的东西配置成内核。2、生成内核的方法:厂家提供配置好的Linux内核源码,比如:买了树莓派,提供树莓派linux内核源码2.1、第一种方式:CP 厂家的.config 到 .config。第二种方式:make meuconfig 一项项配置,通过基于厂家的.config来配置。

2021-02-28 20:28:27 369

原创 嵌入式设备带操作系统的启动扫盲以及源码目录分析

嵌入式设备带操作系统的启动1、裸机启动1.1、C51,STM32(裸机)——》C直接操控底层寄存器实现相关业务。如:垃圾桶wemosD1 、避障小车等2、带操作系统的启动2.1、X86、Intel windows启动过程:电源——》BIOS——》windows内核——》C、D盘——》程序启动。2.2、嵌入式产品: 树莓派、mini2440、mini6410、nanopi、海思、RK(瑞芯微)启动过程:电源——》BootLoader——》Linux内核——》文件系统(根据功能性来组织文件夹

2021-02-28 09:31:00 182

原创 树莓派之交叉编译详解

树莓派之交叉编译详解1. 交叉编译是什么,为什么要交叉编译交叉编译:是在一个平台上生成另一个平台上的可执行代码。我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行C编译:是在一个平台上生成在该平台上的可执行代码C51 交叉编译的发生在keil(集成环境上面)stm32C为什么要交叉

2021-01-31 17:25:59 258

原创 树莓派外设开发之wiringpi库引用

树莓派外设开发之wiringpi库引用1.树莓派的接口: 驱动IO口:input output 对主控来说Input:人体,烟雾,火焰,震动等Output:继电器,蜂鸣器PWM:电机调速,灯光调明亮度语音识别模块,液晶屏串口uartIICSPIIIS其他特定硬件的接口:flashNanopi:LinuxS3c2410,2440 6410Tiny210 tiny4412海思方案,瑞芯微方案,移远方案C51,stm32,arduino,wemosD1:没有操作系统(Linux)

2021-01-22 15:58:22 343

原创 Linux库之静态库与动态库

Linux库之静态库与动态库一、为什么要要库呢、优势分文件编程优势:1、 使这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。就比如printf()函数都是前人做好库,你想要调用只需要包含头文件就行啦。2、程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries)Linux中命名系统中共享库的

2021-01-21 22:38:02 209

原创 ssh方式登录树莓派

ssh方式登录树莓派登录前配置网络准备工作一、 让树莓派入网命令行输入sudo nano /etc/wpa_supplicant/wpa_supplicant.conf修改进入nano 文档编辑器配置网络界面Ctrl+o 保存,会有提示是否写入。我们按回车。Ctrl+x退出 GNU nano 2.7.4 File: /etc/wpa_supplicant/wpa_supplicant.conf [ 112.316081] Under-volta

2021-01-20 15:27:16 372

原创 树莓派刷机及配置串口方式登录

树莓派刷机及配置串口登录一、刷机准备的工具:1、一张8G的sd卡和一个读卡器。2、usb转TTL模块和4根杜邦线。3、树梅派开发板。刷机的软件和资料:1.、Win32DiskImager 刷机软件2、 SDFormatte 格式化sd卡工具3、SecureCRT 串口登录软还能二、步骤:1、sd卡格式化打开SDFormatter选择擦除格式化2、打开Win32DiskImager 刷机软件 ;选择刷机包,接着选择写入,然后

2021-01-20 09:33:32 234

原创 Linux—socket套接字网络编程

网络编程概述:1、为什么需要网络编程?a、使用场景需求普遍是,视频、电话、信息等,都是建立于单机与单机之间的通讯。b、网络通讯可以建立在多台单机连接通信,不局限于单机的内核通讯(如进程间通讯、管道、消息队列、共享内存等都依赖于内核)。2、建立网络编程地址IP+端口号3、网络信息交互协议(http、tcp、DUP);什么是协议呢,简单的比方,像串口通讯都约定的8位数据位,1位停止位等。socket套接字网络编程1、普遍使用TCP/UDP这两种通讯协议。TCP/UDP协议的对比:a、TCP

2021-01-14 15:16:28 138

原创 Linux之多线线程、互斥锁、条件。

Linux之多线线程、互斥锁、条件。多线程开发基本概念主要包括:线程、互斥锁、条件。1、线程操作:分为线程创建、退出、等待3种;2、互斥锁:包括4种操作,分别是创建、销毁、加锁、和解锁。3、条件操作有5种操作:创建、销毁、触发、广播和等待,其他的一些线程扩展概念,如信号灯等、都可以通过上面的三个基本元素的基本操作封装出来。一、线程操作1、创建线程函数原型: #include <pthread.h> int pthread_create(pthread_t *restric

2021-01-13 13:58:49 59

原创 Linnux信号量之semget()、semctl()、semop()函数说明及应用

Linnux信号量函数及应用概述:信号量(semzphore)与ipc结构不同,他是计数器。信号量用于实现进程的互斥与同步,而不是用于存储进程间通讯数据。说白了,信号量是用来控制进程间的通讯的,实现两个进程或多个进程之间的信息交互的先后起到重要作用。1、特定a、信号量用于进程同步,若要在进程传递需要结合共享内存。b、信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。c、每次对信号量的PV操作不仅限于对信号量值加1或减1,而且可以加任意整数。d、支持信号量组。e、信号量应用步骤:创

2021-01-11 21:02:45 1293

原创 Linux—信号如何携带消息之高级版

Linux—信号如何携带消息之高级版携带消息原理:1、 绑定 sigaction()2、sigqueue() 发送消息1、接受、绑定信号sigaction()原函数#include <signal.h> //绑定信号int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact); 参数: signum: 要捕捉的信号 act : 结构体

2021-01-11 18:14:52 182 4

原创 Linux—信号如何携带消息之入门版

Linux—信号如何携带消息之入门版对于Linux来说,实际信号是软中断,许多重要的程序都要处理信号,信号为Linux提供一种处理异步事件的方法,比如终端客户输入Ctl+c来中断程序,会通过信号机制停止程序。1、信号概述每个信号都有名字和编号,这些名字都以“SIG”开头。信号定义在“signal.h”头文件中,信号名字都定义为整数。具体的信号名称可以使用kill -l 来查看信号名字以序号,信号是从1开始编号的,不存在0信号,kill对于信号0又是特速应用2、信号处理(三种):忽略、捕捉、默认

2021-01-11 16:45:49 157

原创 ftok() 函数讲解 获取内核键值

ftok() 函数:获取消息队列的键值1、概述:系统建立IPC通讯(消息队列、信号量和共享内存)时必须指定一个ID值,通常情况下,该ID值通过ftok函数得到。2、原型: #include <sys/types.h> #include <sys/ipc.h> key_t ftok(const char *pathname, int proj_id);2、参数说明:pathname : 就是你指定文件名(存在的文件),一般使用当前目录用(.)id : 是子序号

2021-01-11 12:42:30 365

原创 Linux之进程间通信(管道、消息队列、共享内存)

CLC@Embed_Learn:~$ ./a.outthis is childerthis is father pid=5561,date=2sh: 1: pause: not foundCLC@Embed_Learn:~$

2021-01-11 11:08:24 196

原创 Linux —system、popen函数用法

Linux —system、popen函数用法一、system()函数 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字 符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。 1、原型:#include <stdlib.h>int system(const char *command);2、返回值:如果

2021-01-07 22:49:58 187

原创 Linux进程—exec族函数 execl, execlp, execle, execv, execvp

exec族函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec族函数去执行新的程序;当该进程调用exec族函数时,该进程被替代为新程序,因为exec族函数并不创建新进程,所以前后进程ID并未改变。1、为什么要用exec族函数?(1) 在网络服务器进程中常见的父进程等待客户端服务请求;父进程希望复制自己,使得父子进程可以执行不同的程序完需求。用在此场景中,父进程可以不断的等待客户的接入,同时创建子进程去完成对客户端的对接。(2)在一个进程内部被调用执行一个可执行文件,可执行文件可以

2021-01-07 22:04:13 388 2

原创 Linux—进程相关的api

Linux—进程相关的api:fork、vfork、wait等——————————————————————————————————一、fork()函数——————————————————————————————————1、fork()函数会复制一份父进程存储空间;后来uni做优化,当子进程用到父进程的内存时才写时拷贝。2、 如何查看进程ps -aux3、 过滤 grep 配合ps -aux 用如:ps -aux| grep init4、 获取进程的pid号用getpid()函数。5、

2021-01-07 14:56:32 371

原创 Linux进程相关的概念

Linux进程相关的概念理清楚以下的5个问题:1、什么是程序,什么是进程,有什么区别?程序是静态的概念,gcc xxx.c -o pro 磁盘中生成pro文件,叫程序。进程是程序的一次运行活动,通俗点讲是程序跑起来了,系统中生成一个进程。2、如何查看系统中有哪些进程?a、操作系统提供一个指令ps,配合grep使用查看是否存在某个进程。b、或者使用top来观察进程。ps -aux|grep +某个程序如:CLC@Embed_Learn:~$ ps -aux|grep a.outWarn

2021-01-07 10:12:33 66

原创 Linux—常用的基本命令

Linux乌班图开发环境下全是用命令来驱使硬件干活并不像windows界面那么人性化,所以对于一个初学者来说必须掌握要一些入门常用的命令1、如何打开终端界面键盘 按下: Ctrl+Alt+T2、如何配置终端界面分辨率查看所以分辨率 ;命令行输入: xrandr设置分辨率 ; 命令行输入: xrandr -s +分辨率3、创建并编辑一个程序文件命令行输入: vi + 文件名字+.c命令行输入: i4、保存并退出程序文件先按 Esc 键 再 输入 :wq1、文件和

2021-01-06 21:52:15 66

原创 fopen与open的区别

一、fopen与open的区别1、来源不同open是unix系统调用函数(包括Linux),返回的是文件描述符,它是文件描述符表里的索引。fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调不同的内核api,返回的是一个指向文件结构的指针。2、移植性从来源看,fopen是C标准函数,因此拥有良好的移植性,而open是unix系统调用,移植性有限,如windows下相似的功能使用api函数CreatFile。3、使用范围open返回文件描述符,而文件描述符是unnix系统下的重要概念

2021-01-06 18:08:44 12246

原创 文件操作原理概述

一、文件操作原理概述文件描述符:1、 对于内核而言,所有打开文件都有文件描述符(一个非负整数)引用,当打开一个现存或创建一个新文件是,内核向进程返回一个文件描述符,当读写操作时,用open和creat返回文件描述符标识该文件,将其作为参数传递给read和write。按照惯例,unx shell 使用文件描述符0与进程的标准输入结合,文件描述符1与标准输出结合,文件描述符2与标准错误结合,SRDIN_FILEND、SRDOUT_FILEND、STDERR_FILEND 这几个宏代替0、1、2这几个数

2021-01-06 14:51:31 309

原创 Linux中文件操作,open、read、write、lseek的用法

Linux中文件操作,open、read、write、lseek的用法概述:操作文件原理:打开/创建文件——读取文件/写入文件——关闭文件1、 在Linux当中操作文件,一般都是open打开一个文件,得到文件描述符,然后进行读写操作,后close关闭文件即可。一、打开/创建文件1.open函数//open函数需要的包含头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>

2021-01-06 10:04:38 769

空空如也

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

TA关注的人

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