玫瑰花店的博客

劝君惜取少年时
私信 关注
玫瑰花店
码龄3年

为之则易,不为则难!

  • 21,668
    被访问量
  • 59
    原创文章
  • 130,195
    作者排名
  • 43
    粉丝数量
  • 于 2018-07-14 加入CSDN
获得成就
  • 获得54次点赞
  • 内容获得29次评论
  • 获得86次收藏
荣誉勋章
兴趣领域
  • #Android
    #Java#数据结构#性能优化
  • #硬件开发
    #FPGA开发#嵌入式硬件#硬件架构#arm开发#pcb工艺#基带工程#dsp开发#单片机#材料工程#硬件工程#射频工程#精益工程#驱动开发
TA的专栏
  • Linux驱动
    8篇
  • C++
    1篇
  • QT
    1篇
  • Python
  • 机器视觉
  • Linux服务器开发C/C++
    1篇
  • FreeRtos
    7篇
  • Linux系统编程
    12篇
  • Linux内核
  • C语言编程
    16篇
  • codeblocks
    1篇
  • stm32
    14篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

QT学习一--------新建工程和简单的UI使用

新建工程第一个最常用的,创建一个窗口工程第二个是控制台项目,主要是调用控制台一般情况都是写C/C++的工程路径不可以有中文(最好默认勾上),名称最好也不要起中文名称这个是编译的套件。比如我要做移植到开发板里面的界面,就需要加一个交叉编译链套件。通俗点说就是选择需求平台所对应的编译环境。三个基类:QMainWindow 带菜单栏的窗体 QWidget 不带菜单栏的窗体QDialog 对话框至此创建工
原创
2阅读
0评论
0点赞
发布博客于 2 天前

C++之------类和对象

类的结构class text{public: //公有数据成员 //公有成员函数protected: //保护数据成员 //保护成员函数private: //私有数据成员 //私有成员函数};普通成员函数#include <iostream>using namespace std;class text{public: void fun(int a,int b); void prit();private: int nu
原创
26阅读
0评论
0点赞
发布博客于 昨天

TCP/IP协议超详解及SYN攻击原理

TCP/IP协议超详解首先我们先来说一下TCP/IP协议的握手和挥手。TCP连接时5种状态解释CLOSED 初始状态,表示TCP连接是“关闭着的”或“未打开的”LISTEN 表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接SYN_SENT 表示请求连接SYN_RCVD 表示服务器接收到了来自客户端请求连接的SYN报文(极其短暂)ESTABLISHED 表示TCP连接已经成功建立。三次握手(1)第一次握手:Client将标志位SYN置为1,随机产生一
原创
27阅读
0评论
1点赞
发布博客于 8 天前

uboot启动流程

2.5.1程序启动过程:1.首先u-boot上电后执行的第一个文件为arch/arm/cpu/armv7/start.S文件,start.S文件准备好第二阶段的运行环境。2.上面start.S执行完毕最终会调用到arch/arm/lib/board.c中的board_init_r函数,函数对会对flash、net、串口等进行初始化,最终会进入死循环,如下:for (; ; ){main_loop (); //进入等待命令解析状态,直到启动内核后,u-boot就退出了。}2.5.2 Boo.
原创
16阅读
0评论
0点赞
发布博客于 3 小时前

移位操作实例

许久不用寄存器,写底层时候遇到个存储问题,移位懵逼了半天…示例:有这样两个数组uint16_t 16_reg[i];uint8_t 8_reg[j];我们需要将16位数组中的一个元素存储到8位数组中去。解答: 8_reg[i]=16_reg[j]>>8 & 0xff; 8_reg[i++]=16_reg[j] & 0xff;解释:左移8位后:也就是说我们要把前八位放到8_reg[i]里面嘛,为啥要&0xff呢。假如说这前八位数据前面有一个1
原创
6阅读
0评论
0点赞
发布博客于 10 天前

冒泡、选择、插入、希尔、快速。基数排序---C语言版本

选择排序什么是选择排序?1、首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。2、再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。3、重复第二步,直到所有元素均排序完毕。演示假设有这样一个数组:int sum[9]={2,5,8,1,7,4,3,9,6};我们首先需要找到整个数组里面最小的哪一个元素。假设第一个元素2为最小元素,我们开始往后比,当遍历到第四个元素时候遇到比2小的数1.那么我们暂将1记做最小数并保存其下标,接着往后比发现没有比1还要小
原创
14阅读
0评论
0点赞
发布博客于 10 天前

为啥不会报错,无意间看到一个面试题。

发布Blink于 15 天前

C语言const用法详解(带实例)

const与define区别在C语言中const常用来定义常量,表示这个常量是不可以被修改的。define宏定义也可以用来表示一个常量。那么他们有那些区别呢!1、预编译指令只是对值进行简单的替换,不能进行类型检查2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性3、编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。const作用1、const修饰局部变量const int a=
原创
6阅读
0评论
0点赞
发布博客于 15 天前

嵌入式之----MODBUS协议详解

什么是modbus协议?MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从 1979 年出现工业串行链路的事实标准以来,MODBUS 使成千上万的自动化设备能够通信。目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端口 502 访问 MODBUS。传输类型 异步串行传输数据格式我们来看一下,modbus里面传输一帧数据的格式地址域:设备地址MODBUS 协
原创
11阅读
0评论
0点赞
发布博客于 10 天前

ARM小知识点总结

ARM有几种工作模式?用户、系统、快速中断、外部中断、超级用户、异常、未定义共七种模式CPSR、SPSR寄存器分别是什么?CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。CPSR在用户级编程时用于存储条件码。SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都
转载
4阅读
0评论
0点赞
发布博客于 10 天前

FreeRtos(6)-----互斥量优先级继承机制

接上篇的优先级翻转互斥量#include "stm32f10x.h"#include "led.h"#include "stdio.h"#include "usart1.h"#include "systick.h"#include "delay.h"#include "my_key.h"#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "semphr.h"#define QUEUE_LEN 8#d
原创
5阅读
0评论
0点赞
发布博客于 10 天前

FreeRtos(5)-----模拟优先级翻转

模拟优先级翻转我们知道任务的优先级在创建的时候就已经是设置好的,高优先级的任务可以打断低优先级的任务,抢占 CPU 的使用权。但是 在很多场合中,某些资源只有一个,当低优先级任务正在占用该资源的时候,即便高优先 级任务也只能乖乖的等待低优先级任务使用完该资源后释放资源。这里高优先级任务无法 运行而低优先级任务可以运行的现象称为“优先级翻转”。示例使用二值信号量模拟优先级翻转。#include "stm32f10x.h"#include "led.h"#include "stdio.h"#
原创
7阅读
0评论
0点赞
发布博客于 10 天前

FreeRtos(4)-----计数信号量

freeRTOS实时操作系统移植FreeRtos(1)-----任务创建与管理FreeRtos(2)-----消息队列FreeRtos(3)-----二值信号量以上是历史FreeRtos博客。FreeRtos系列我会坚持更下去计数信号量计数信号量其实就二值信号量的进阶版本,只是二值只能设置信号量为1,也就是一次只能一个进程访问。计数信号量则可以设置一次多个进程访问。二值信号量在新版本创建信号量函数时候必须要先释放才能申请,而计数信号量不需要先释放。计数信号量API计数信号量API和二值信号量
原创
26阅读
0评论
0点赞
发布博客于 20 天前

FreeRtos(3)-----二值信号量

freeRTOS实时操作系统移植FreeRtos(1)-----任务创建与管理FreeRtos(2)-----消息队列以上是历史FreeRtos博客。FreeRtos系列我会坚持更下去二值信号量其实简单点二值信号量就像Linux里面的进程同步,也就是说一个进程需要另一个进程的运行结果才能运行。二值信号量API头文件:#include "semphr.h"二值信号量的创建SemaphoreHandle_t xSemaphoreCreateBinary();参数:无返回值:创建成功返回一
原创
16阅读
0评论
0点赞
发布博客于 21 天前

FreeRtos(2)-----消息队列

freeRTOS实时操作系统移植FreeRtos(1)-----任务创建与管理以上是历史FreeRtos博客。FreeRtos系列我会坚持更下去。freeRTOS消息队列先来看一下队列:先进先出这个图可能画的有点问题,有大佬知道具体过程的欢迎指正。我们先来看一下Freertos消息队列的APIAPI头文件:#include "queue.h"消息队列的创建xQueueCreate((UBaseType_t)QUEUE_LEN,(UBaseType_t)QUEUE_SIZE);参数:
原创
15阅读
2评论
0点赞
发布博客于 22 天前

FreeRtos(1)-----任务创建与管理

freeRTOS实时操作系统移植以上是历史FreeRtos博客。FreeRtos系列我会坚持更下去。FreeRtos的任务创建任务的创建函数 BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const configSTACK_DEPTH_TYPE usStackDepth, void * const pvParameters, UBa
原创
13阅读
1评论
0点赞
发布博客于 23 天前

STM32常见通信方式通信类型总结

串行:数据按位传输;并行:数据并行发送;同步:发送端和接收端同时处理;异步:发送端和接收端不同时处理;单工:设备只能做发送端/接收端;半双工:设备同一时刻只能做发送/接收;全双工:设备同一时刻即可做发送又可做接收;\通信类型物理接口通信协议应用举例串口串行异步全双工TX/RX起始位+数据位+奇偶校验位+停止位串口转USB,串口转485SPI串行同步全双工CS/SCK/MISO/MOSI同发同收,上升沿采样/下降沿采样FLASH/OLED/SD.
原创
78阅读
0评论
0点赞
发布博客于 28 天前

linux驱动之----多节点编程实战

简介实现功能:按键按下控制LED灯亮灭实现思想:KEY驱动层:使用Linux2.6方式注册,自动注册设备文件Linux中断判断按键按下,Linux定时器实现按键消抖等待队列实现用户端的阻塞IO提高cpu利用率。KEY的用户层:使用4个线程分别读取按键的状态,read无按键按下时候阻塞使用消息队列和LED用户层通信,发送按键信息LED驱动层:使用杂项注册设备LED用户层:接收KEY用户层发送的按键信息,控制LED灯的亮灭代码实现KEY驱动层:key.c#include<
原创
14阅读
0评论
0点赞
发布博客于 1 月前

Linux驱动之----Linux2.6方式设备注册

Linux2.6方式设备注册API杂项设备注册和经典设备注册方法可参考我前俩篇博客Linux驱动之----杂项设备注册Linux驱动之----经典方式注册在linux2.6里面设备号的申请方式一共有2种动态设备号申请:>头文件:> #include <linux/fs.h>> 函数原型:> int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, co
原创
18阅读
3评论
1点赞
发布博客于 1 月前

Linux驱动之----经典方式注册

经典方式注册与杂项设备注册区别杂项方式注册生成的设备文件会自动挂载在/dev目录下面,经典方式注册的设备不会自动挂载在/dev目录下面.杂项设备注册的主设备号只能为10,经典方式注册主设备号可以指定或者系统自动分配一个除了(10)以外的任意一个设备号。杂项方式只暂用一个子设备号,经典方式占用当前主设备号所有的子设备号(0~254)经典方式注册API函数头文件: #include <linux/fs.h>功能: 注册函数:函数: int register_chrdev(u
原创
22阅读
0评论
0点赞
发布博客于 1 月前

递归创建二叉树程序步骤详解

首先上代码后面对代码经行分析。代码#include <stdio.h>#include <stdlib.h>typedef struct tree{ char date; struct tree *left_leaf; struct tree *right_leaf;}tree,*BiTree;void creat_tree(BiTree *T)//创建树{ char val; scanf("%c",&val);
原创
29阅读
0评论
0点赞
发布博客于 1 月前

指针传参问题

下午看博客时候,遇到个函数传参值是否改变的问题,感觉挺有意思的。先看这样一个程序。#include "stdio.h"#include "stdlib.h"int a=1;int b=2;void fun(int * t){ t=&a;}void main(){ int *q; q=&b; printf("a=%d
",a); printf("b=%d
",b); printf("&a=%p
",&.
原创
18阅读
0评论
0点赞
发布博客于 1 月前

说一说递归里的return返回!!!

今天看二叉树时候遇到递归,结果半天没想起来递归是啥(实在是平时几乎没有用到递归),想了想既然用到了就总结一下吧!有return的递归有return的递归我参考了网上一个大佬的博客。有这样一个程序: #include<stdio.h> int cheng(int a) { if(a>1) { a=a*cheng(a-1); printf("%d
",a); } retur
原创
125阅读
0评论
1点赞
发布博客于 1 月前

C语言全局变量、局部变量....堆栈等内存问题详解

C语言里面的内存c语言有四大存储空间代码区,静态存储区,栈区,堆区代码区:就是存放代码的存储区域,它不涉及代码中的变量值。静态存储区:用来存放全局变量和静态变量。栈区:也可称为局部变量存储区,所以它是专门存储局部变量的堆区:也称为动态存储区。这块区域的内存供c语言程序动态申请。通俗地讲,也就是我们用malloc族函数申请并用free族函数释放的内存。堆栈详解栈:后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我
原创
57阅读
0评论
0点赞
发布博客于 1 月前

Linux驱动之----杂项设备注册

驱动驱动是什么?通俗来说:好比一个人,驱动就是灵魂,灵魂驱动人的操作!单片机:寄存器/库函数初始化和硬件功能代码Linux: 它是一个描述设备文件的代码设备文件什么是设备文件:插入一个SD卡。dev/sdb dev/sdb1两个分区—两个块设备文件既然Linux认位所有的设备也是文件那么设备既然是文件,那么请问设备文件有没有普通文件的特性?我们可以怎么操作?打开 、关闭、读、写、操作open close read write ioctl你的LED灯/dev/下有没
原创
25阅读
0评论
0点赞
发布博客于 1 月前

Linux驱动之----内核模块化编程

模块化概念c语言按照功能将一个.c文件拆分为多个.c以及.h文件stm32对应每一个外设都有一个.c和.h文件,.c文件写模块的初始化以及功能函数,.h文件对应函数的声明,如果想使用该外设只需包含其头文件即可。linux内核的功能很强大,如果我们想将自己的某一个模块加载到内核那么我们可以修改内核源码重新编译烧写内核(模块功能稳定),但是这样做是不是你没写一次程序就要重新编译一次内核,是不是太麻烦了,所以我们可以选择动态编译到内核,内核编译一次就行,每次写完程序源码,内核动态调用。等所有程序都功能
原创
26阅读
0评论
0点赞
发布博客于 1 月前

Linux驱动之-----内核制作

前提编译内核的前提是交叉编译链的安装完成。可参考我上一篇博客。Linux驱动之-----交叉编译链的安装我使用的开发板是友善之臂4412,官方提供了相应的内核。内核裁剪解压:tar -xvf linux-3.5-20141114.tar内核裁剪有专用的裁剪工具,不可能一堆源代码一个一个增删改查吧!我们用到内核自带的一个工具:make meunconfig我们要使用这个内核裁剪工具,首先需要安装两个依赖。apt-cache search ncursesapt-get in
原创
26阅读
0评论
0点赞
发布博客于 1 月前

Linux驱动之-----交叉编译链的安装

安装首先下载交叉编译链(arm-linux-gcc),下载这里就不多说了。网上一找一堆。然后解压到根目录:sudo tar -xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /解压完成后进入根文件夹下面的opt目录。这样说明解压成功,接下来我们要配置环境变量。在/etc/profile中最后一行后面添加环境变量:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin然后保存退
原创
13阅读
0评论
0点赞
发布博客于 1 月前

FSMC版本:多驱动器(ILI9486L等)驱动TFTLCD屏幕

使用开发板类型为:STM32F407系列一、屏的相关信息分辨率:320*480尺寸:3.5寸驱动器:ILI9486L引脚接口:我们这里选用16-bts 8080-series MCUIM[]为010,使用了16个数据引脚。通过部分我们可以得到信息:CSX: 片选信号,用于启用或者禁用ILI9486L芯片RESX: 复位信号WRX: 读信号RDX: 写信号DB[17:0]: 并行数据总线D/CX: 数据/命令选择的信号,当D/CX= ' 1 '时,DB[17:0]位显示RAM
原创
1926阅读
5评论
2点赞
发布博客于 2 月前

Ubuntu下使用C语言和MySQL模拟一个银行管理系统

首先MySQL基础语法就不说了就增删改查,网上一找一大堆。API函数在MySQL官网上面都有。下面会主要介绍几个常用的。MYSQL C语言API1、云服务器选择我选择的是腾讯云服务器,学生认证后很便宜,一年才90多人民币。3月起租才27RMB。如果同时用腾讯云服务器的小伙伴注意咯,购买时候选择的是Ubuntu18.04的,但是不知道怎么回事,默认的c/c++开发环境是用不了的,测试你会发现提示找不到函数头文件。解决方法:删除gcc安装和配置文件。sudo apt-get --purge remo
原创
46阅读
0评论
1点赞
发布博客于 2 月前

select函数--IO多路复用详解

本章基于网络编程,需要学习网络编程的可以看我这篇博客:socket编程(超简单、详细、可运行)–实现一个简单的聊天程序什么是多路复用IO呢?多路io:允许同时对多个I/O进行控制可能这样说还是有点抽象,stm32下面有GPIO口,如果我需要一个LED屏幕连接在32开发板上面,是不是又很多的接线,每个接线接着板子上面的对应引脚上面,既然我们接线这个引脚了,是不是首先需要让这个引脚处于使能状态,这就是开时钟,多个引脚我们是不是要开多个引脚的时钟。配置好后我们的开发板的处理器是不是会按照需要去对这些IO口
原创
83阅读
0评论
0点赞
发布博客于 3 月前

Linux系统编程之线程深度详解(有实例)

线程基础*******************************************************线程创建函数:int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void *(*start_routine)(void*), void *arg);thread:线程的IDattr:线程的属性默认直接给NULLstart_routine:函
原创
75阅读
0评论
0点赞
发布博客于 3 月前

Linux系统编程--共享内存

共享内存介绍共享内存之前我们先看一下键值。什么是键值?键值:就是保证进程之间打开的通信的介质是同一个linux的键值:以某个数值打开一个文件所产生出来的ID是固定的比如说一个文件在/home/lyx/test/1.c特定的函数:获取键值的函数XXX(/home/lyx/test/1.c);打开这个文件,返回的ID是一个定值不管你用哪个进程不管何时刻,你在整个Linux下打开这个文件返回的这个ID都是一定的保证唯一性:只要有唯一性就可以利用这个唯一性来创建消息队列、两个进程都用
原创
27阅读
0评论
0点赞
发布博客于 3 月前

STM32--SSD1306B-0.96寸OLED屏幕复习

1.驱动介绍驱动器:SSD1306B分辨率:128*64屏幕类型:OLED屏物理接口:6800/8000并行接口、I2C、SPI;电压:最低支持2.2V应用:便携式设备,消费者电器,便携式医疗设备。RES:复位线:低电平有效;CS:片选:芯片使能;D/C:数据/命令控制接口:拉高表示数据,拉低表示命令;E:使能信号,(6800/8080)并行接口时使用;R/W:读/写的控制接口,拉高表示读数据,拉低写数据;D0~D7:数据线;以上需要看oled屏驱动手册,这里我总结了一下用到的
原创
200阅读
1评论
1点赞
发布博客于 3 月前

linux下用C语言实现MP3播放器

首先我们要来看几个函数:接下来我们安装一下madplay这是一个播放器。sudo apt-get install madplay建议给软件源换成阿里的,下载的快。安装完成后测试方法为:madplay xxxx xxxx最好是绝对路径示例:madplay /home/jason/music/stan.mp3程序思路:首先打开存放音乐文件的目录把然后找出所有的.mp3文件并保存文件名文件名有了,路径有了。就简单了嘛接下来看一下madplay指令:管理madplay的主程序
原创
311阅读
0评论
0点赞
发布博客于 3 月前

linux之Makefile深入

main: main.o fun1.o fun2.o fun3.o fun4.o gcc main.o fun1.o fun2.o fun3.o fun4.o -o mainmain.o: main.c gcc -c main.c -o main.ofun1.o: fun1.c gcc -c fun1.c -o fun1.ofun2.o: fun2.c gcc -c fun2.c -o fun2.ofun3.o: fun3.c gcc -c fun3.c -o fun3.ofun4.o:
原创
17阅读
0评论
0点赞
发布博客于 3 月前

linux下动态库和静态库的创建

什么是库?简单来说,就像函数一样。你自己写了一个函数,想调用就调用嘛。如果别人也想用你这个函数,但是你这个函数写的特别优秀漂亮,功能特别完善。你会给他源码嘛?所以库就是类似一个你自己写的函数,你可以给代码隐藏起来。这样别人可以用但是不能看到源码。—————————————————————————在Linux里面库可以分为两种:静态库 xxx.a动态库 xxx.so首先我们先来看一下静态库静态库就是将你调用的库编译到可执行程序里面。具体我们看例子我们先创建两个小程序:static_jaso
原创
31阅读
0评论
0点赞
发布博客于 3 月前

Linux进程间通信(2)---无名管道和有名管道(超简单,有示例程序)

管道是什么呢?比如说有两个池塘A和B如果我先要A和B中的水可以相互流动,那么我们只需要在两个池塘间安放一条水管就可以了嘛!如果将A、B换成我们程序中的进程,那么使这两个进程通信的那根管子就叫管道。管道可以分为两种:无名管道:用于父子进程间的通信。有名管道:用于任意两进程间的通信。首先我们来看一下无名管道管道不是有两端嘛,每一端都可以流入水和流出水,但是流入和流出是不是只能有一种情况呢。所以在无名管道中也一样,无名管道的两端,每一端都可以读和写。若一端为读就要关闭他的写功能,另一端就只能为写关
原创
53阅读
1评论
0点赞
发布博客于 3 月前

Linux进程间通信(1)---信号(超简单,有示例程序)

开篇先说一句,这是信号!!!!!不是信号量进程间的通信可以分为一下几类:1、信号2、管道3、共享内存4、消息队列5、信号量集6、网络编程以上后续我都会一个一个更哦!第一节我们先讲信号:1、信号的本质?信号就类似中断,当中断源被触发就去执行中断服务函数。这样说好理解吧!再通俗点说,信号就像马路上的红绿灯,红灯亮起时候,不允许车通过,当绿灯亮起时候车辆可以通行。2、信号的分类?按照可靠性方面: 可靠信号 不可靠信号与时间关系分类: 实时信号 非实时信号3、信号的处理方式?
原创
93阅读
4评论
1点赞
发布博客于 4 月前

freeRTOS实时操作系统移植

首先我们来了解一下什么是freeRTOS?FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可
原创
47阅读
1评论
1点赞
发布博客于 24 天前

STM32F103使用L9110s驱动直流电机(必须简单易懂)

首先我们来看一下L9110S的驱动手册:注意到IB接的是PB8,IA接的是PB9根据第二个图片里面的真值表我们可以得到如下信息:PB8配置位复用推挽输出,PB9配置为通用推挽然后我给PB8配置PWM波,PB9给拉低,那么电机是不是就是正转反转同理停止两个端口同时拉低或者拉高就行了接下里我们来配置一下PWM波,我们配置电机反转PB9配置位复用推挽输出,PB8配置为通用推挽 然后我给PB9配置PWM波,PB8给拉低,那么电机是不是就是正转看一下上图的定时器为TIM4,第4个管道。
原创
784阅读
3评论
2点赞
发布博客于 4 月前

STM32中ADC详解(极简易懂)

首先我们要知道什么是ADC?单片机中的baiADC是Analog-to-Digital Converter的缩写,指模/数转换器或者模数du转换器。ADC是指将连续变化的模拟信号转换为离dao散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模/数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。然而,有一些模拟数字转换器并非纯的电子设备,例如旋转编码器,也可
原创
913阅读
0评论
2点赞
发布博客于 4 月前

链表基础4(超简单)--创建一个长度为n的双向链表(代码可运行)

单链表的基础知识,创建,增删,逆序可以看我前几篇博客。点下面相应就可以跳过去咯!链表基础1(超简单)–创建一个长度为n的单链表链表基础2(超简单)–单链表的插入和删除链表基础3(超简单)–单链表的逆序首先我们来理解一下什么是双向链表,话不多说上图:head是头节点地址,a1、a2分别是后面两个节点地址。单项链表不就是a1的B存放head的地址嘛,a2的B存放a1的地址,这样不就连接起来了嘛双向链表也是一样,只是在节点结构上比单项链表多了一个指针域,就是上图的A。尾节点a2的A中存放a1的地址
原创
110阅读
0评论
0点赞
发布博客于 4 月前

socket编程(超简单、详细、可运行)--实现一个简单的聊天程序

首先我们先来看一下套接字通讯的流程!图片中的read()和write()等同于send()和recv()socket通信流程服务器端:1、创建套接字socket2、绑定套接字bind3、监听listen4、等待连接accept5、接收发送recv、send6、关闭套接字close客户端:1、创建套接字socket2、连接服务器connect3、接收发送recv、send4、关闭套接字close我们先看一下这样几个函数,稍后我们在继续#include<arpa/ine
原创
185阅读
0评论
1点赞
发布博客于 5 月前

链表基础3(超简单)--单链表的逆序

链表基础和链表的插入删除可以看上两篇博客!链表基础1(超简单)–创建一个长度为n的单链表链表基础2(超简单)–单链表的插入和删除这一节我们来看一下链表的逆序,稍微有一丢丢的难度!链表是由一个个的节点构成的嘛!话不多说上图理解!有这样一个链表,除去表头就是a1,a2,a3对吧!如果我们要逆序,逆序完成应该是a3,a2 a1。我们要如何逆序呢?便于观察我们简写一下链表格式:表头 a1 a2 a3 a4 a5 a6 a7.......如果我们将a2提出以来,a1和a3相连是不是就是表头 a2
原创
84阅读
0评论
1点赞
发布博客于 5 月前

链表基础2(超简单)--单链表的插入和删除

这篇文章是基于链表基础1(超简单)–创建一个长度为n的单链表所写的,需要看基础的可以跳过去,链表的基础知识这里就不在讲了。我们首先来看一下链表的删除,话不多说直接上图。如图,比如我们要删除B这个节点。我们先来看一下删除后的图。一对比你就明白啦!两个图一对比你就发现,如果我们要删除B节点,我们首先要将B节点的前后两个节点A,C连起来,这样B不就孤立了嘛,我们就可以给他free掉了!是不是灰常简单呀!我们来看一下具体代码实现。先看一下这个链表的结构typedef struct lianbiao
原创
203阅读
0评论
2点赞
发布博客于 5 月前

链表基础1(超简单)--创建一个长度为n的单链表

首先我们来了解一下什么是链表?通俗的来说链表就是一种链式存储结构,大家可以抽象理解一下把他想象成一个铁链,铁链不是由一个个铁环,环环相扣组成的嘛!那么每个铁环就可以叫做一个节点,如果我们再在每个铁环上面系上两个个小盒子,那么这两个小盒子一个叫做数据域就是存放每个节点数据的地方一个叫做指针域这个就是存放下一个节点(铁环)地址的地方。可能这样说还有点抽象,直接上图。这就是链表里面一个节点的样子,下面我们给多个节点串起来形成链表!我给每个节点的地址设为A,B,C。注意看第一个节点的指针域存放的是第二个节
原创
2339阅读
3评论
6点赞
发布博客于 5 月前

STM32使用DHT11读取温湿度以及usart串口显示乱码解决

使用开发板为stm32f103. USART串口显示乱码问题往下翻上原理图:DHT11数据传送过程解释:步骤一:DHT11 上电后(DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时 DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平;此时 DHT11 的DATA 引脚处于输入状态,时刻检测外部信号。步骤二:微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms(最大不
原创
515阅读
0评论
0点赞
发布博客于 8 月前

STM32系统时钟切换与设置详解

在STM32f407XX系列中,系统时钟(SYSTEM)默认的是HSE提供的,这里举例我们就将默认HSE切换成HSI提供。我们先来看一下时钟树(建议保存此图)首先、在系统中时钟都是设置好的,如果不是给晶振换了(频率不一样的),那么时钟源就发生了改变,这种情况我们需要配置的就稍微比较多了,但一般不考虑这种情况!下面我们看一下HSI的切换步骤:1、开启HSI时钟2、等待HSI就位3、切换HSI作为系统时钟输入源4、等待切换成功(晶振的启动你也得慢慢振起来哈,所以得等一会)5、关闭锁相环6、选
原创
793阅读
0评论
0点赞
发布博客于 10 月前

stm32学习1之GPIO口

ps:使用的32型号是.stm32f407zgt原本我是不打算继续更32的,但是最近的做的一些东西需要用到arm。所以想想就复习一下32吧!毕竟当初学的也确实不咋地。32系列我不会用很官方的话来讲,我会用自己的理解最粗暴直白的表达出来。有什么错误欢迎指正,企鹅:918619587首先我们解释一下什么是GPIO,GPIO就是通用输入输出。这莫理解可能有点抽象,直接上例子吧!最简单的点亮LED灯...
原创
121阅读
0评论
1点赞
发布博客于 1 年前

linux之makefile编写2

在上一篇博文《linux之makefile编写、Linux模块化编程1(最简单的方法)》中我们介绍了makefile最基础的应用。今天我们来看一下稍微深层次一点的makefile文件的编写!话不多说直接上例子在当前目录下面我有三个.c文件分别是qq.c qq1.c qq2.c这三个是独立的文件,每个文件都可以编译成一个可执行文件。也就是说这个三个文件包含3个主函数(三个main函数)。这样我们...
原创
61阅读
0评论
0点赞
发布博客于 1 年前

linux之makefile编写、Linux模块化编程1(最简单的方法)

首先要理解一下makefile是什么东西,有什么作用!官方的话就不说了,简单粗暴理解。makefile就是集成编译,比如说你写了好多个**.c**文件。平常就是一个一个gcc,就算你编译好了还要一个个运行不是太费事了嘛!所以makefile的存在就是“集成编译”一下子编译成一个文件。这样编辑运行起来不就简单太多了莫。废话不多说直接上代码,顺带说一下模块化编程:我先建立一个makefile文件vi...
原创
260阅读
0评论
3点赞
发布博客于 1 年前

stm32关于USART串口配置(小白教程)

第一步理解usart的作用:粗暴理解,USART这个串口就起到连接外设的作用。处理器发送数据--------gpio(然后通过gpio口给发送到片上外设)-------usart-----外设。简单来说,gpio是一扇大门,usart也是一扇大门,只有通过这两扇大门你才能拿到宝藏。当你你打开gpio这个大门你会看到很多路,有一条路是走向usart这个大门,但是这条路有条河你得搭个桥才能过去到...
原创
301阅读
0评论
0点赞
发布博客于 2 年前

用stm32实现按键控制LED灯

main.c函数#include "math.h"#include "led.h"#include "key.h"int main(void){ //初始化LED1234. led_config(GPIOF,LED1_pin); led_config(GPIOF,LED2_pin); led_config(GPIOF,LED3_pin); led_config4(); //初...
原创
1368阅读
0评论
2点赞
发布博客于 2 年前

stm32实现4个LED灯的点亮

#include "math.h"int main(void){ //亮第一个灯 RCC->AHB1ENR |= (1<<2)|(1<<5); GPIOC->MODER &= ~((0x3<<0)|(0x3<<12)|(0x3<<20)|(0x3<<18)); GPIOC->MODER ...
原创
3142阅读
0评论
2点赞
发布博客于 2 年前

如何使用keil5建立一个工程小白教程(库文件上传在资料里)

Keil5建立工程步骤。1.复制一份私人模板。2.打开keil5.3.新建立一个项目4.建立4个组,startup user api STM32F4xx_StdPeriph_Driver5.点击魔法棒 target里面的 选择usemicrolLIB,output里面选择create HEX file ,c/c++里面optimization里面的 1. define里...
原创
2360阅读
2评论
2点赞
发布博客于 2 年前

codeblocks下模块化编程(包含codeblocks使用方法,图文详解绝对详细,这必须得收藏哟!)

首先codeblocks是一款非常好用的编译器,集成的开发环境非常全面。但是使用起来稍微有那么一丢丢的小复杂。今天我们就来介绍在codeblocks下进行模块化编程!第一步:你得有一个codeblocks软件,打开并且新建一个项目到现在建立一个项目已经完成了,是不是很简单啊。下面开始今天的正文:如何模块化编程。第一步:打开左上角的file->new->file…(...
原创
861阅读
0评论
5点赞
发布博客于 2 年前

基于文件的学生管理系统。

基于文件、链表的学生管理系统。将保存和读出分别封装成函数,调用更加方便。欢迎大家一起交流。#include <stdio.h>#include <stdlib.h>#include<string.h>typedef unsigned int u32;typedef unsigned char u8;typedef struct student//...
原创
165阅读
1评论
2点赞
发布博客于 2 年前

C语言实现钟表,年月日时分秒实时更新。(后附函数使用方法)

很简单的一个小程序!为了便于交流,我没有省略步骤。(后附函数使用方法)库文件为:#include<stdio.h>#include<windows.h>#include<time.h>#include<stdio.h>#include<windows.h>#include<time.h>int main(){...
原创
1791阅读
0评论
4点赞
发布博客于 2 年前

C语言用链表做的学生管理系统

用枚举,单项链表做的一个学生管理系统。欢迎交流哈!!!都是用的最最基础的知识咯~~。#include <stdio.h>#include <stdlib.h>#include<string.h>typedef unsigned int u32;typedef unsigned char u8;typedef struct student//定义一...
原创
379阅读
0评论
4点赞
发布博客于 2 年前

C语言写的学生管理系统

每年都有许多刚刚接触C语言小伙伴门,面对老师布置的学生管理系统感到无从下手。网上也有许多版本大多都比较复杂,可能一些刚刚入门的小伙伴看起来会比较困难。 下面是一个完整的学生管理系统。都是用最简单的方法写的。欢迎来交流。q:918619587.#include <stdio.h>#include <stdlib.h>#include <strin...
原创
509阅读
2评论
6点赞
发布博客于 2 年前