自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(262)
  • 资源 (31)
  • 收藏
  • 关注

原创 51单片机机器周期和定时器0使用

先说机器周期,最近玩51单片机,发现里面有强大的内部时钟,下载的居然可以随意修改,很骚。比以前的51确实好玩多了。感觉现在用51做东西完全不比32差了,还不知道性能怎么样。不好意思跑题了。这里先想一个问题,如果我改变了频率,程序中的延时函数,或者定时器,串口这些频率都变了,需要自己重新算才行。 51单片机的一个机器周期等于12个振荡周期,振荡周期其实就是晶振的...

2020-01-09 20:26:02 2180 1

原创 stc15XX单片机的EPROM读写

关于51单片机新增的EPROM功能就不做介绍了,几年没碰51,没想到都发展到如此地步了,非常不错。下面是一个EPROM读写的驱动。读写内部内存,不管是flash或是EPROM都离不开如下几个步骤:读操作:1 解锁此功能2读取内存上内容3上锁此功能u8 EEPROM_read(u16 address) //读数据{ u8 vl; IAP_CMD=0x01; I...

2020-01-09 20:00:32 2002

原创 自制stm32平衡车

马上高考了,没事写一篇制作平衡车的教程.先来一个段子:对于7,8号的高考,我们早就表明态度:不愿考,但也不怕考,必要时不得不考。面对高考的难易程度我们也给出了答案:易,大门敞开,难,奉陪到底。看看主图:这个平衡车是stm32主控+步进电机+3D打印制作的,成本非常低。 首先我们需要准备一些材料1- 控制板 控制板可以在某宝买到,而且比较便宜,还...

2019-06-20 19:34:53 3307

原创 平衡小车之家客服真差

我同事送了我一台直流电机平衡车,然后同事又买了一台步进电机平衡车。都是在平衡小车之家买的,好好看看下面的图片。最近在研究同事的步进平衡小车,然后跑去问一下客服步进电机的参数,一看我说,同事之前买过小车了,就不理人了,简直是无耻商家啊。要说我是虚构也没关系,明人不做暗事,我和你又没有利益关系,我没必要黑你,我既然有你家的产品你就应该服务我,而不是我已经有了你家产品...

2019-04-23 11:32:19 4614 12

原创 stm32-BootLoader程序和app程序合并烧录

我前面的文章有说过,如何制作BootLoader和app程序,但是需要烧录2个hex文件,整个程序才可以正常运行。那如果是量产烧录2次程序是非常耗时间的,通过查阅一些资料,可以把两个hex文件合并成一个hex文件。hex文件的格式不做解释,有兴趣可以百度一下,很多大神说过。我亲自做了2款合并软件一个是dos界面的一个是MFC界面的先看看dos界面的使用运行合并程...

2019-04-18 15:21:08 9994 2

原创 NFC-PN532串口驱动编写

国内网上逛了一圈,NFC-PN532的质料并不多,dataset也是随便介绍了下,开发手册还没有找到。在各大论坛和百科的上找到的质料几乎都是一摸一摸的,要么发几个串口指令,要么就是开源驱动库的上位机。想要弄懂这玩意到底怎么用的,确实不容易。 我总结了一些使用方法,和驱动编写,当然这个模块有很多的功能,这边只会涉及到对卡片的读写操作。下面所讲只适用于串口通信模式。1整体...

2019-04-13 13:43:51 5588 5

原创 c语言函数的数组返回和指针返回

函数内的数组和指针都是属于函数栈空间。如果把数组或指针返回给外部指针,会发生什么?1先看看第一种,返回数组;#include "stdio.h"char * get_c(){ char ch[]="hello"; //这是一个栈空间 char *p; //这也是栈空间 p=ch; printf("%x\n",&ch); printf("%x\n",...

2019-04-13 10:09:52 9511

原创 stm32输入捕获,捕获高电平

输入捕获就是用定时器检测引脚上的电平时间,可以检测高电平时间和低电平时间,然后可以算引脚上信号的频率和占空比。基本思路就是利用定时器的输入捕获功能。定时器捕获到高电平或低电平就会进入捕获中断例如:我们要捕获高电平时间0 设置定时器计数频率和装载值,一般设置1MHz,655351 设置定时器捕获为高电平捕获2 进入捕获中断后,获取CNT计数值或CCRx值,定时器捕获到电平...

2019-03-30 16:12:18 14524 2

原创 stm32定时器输出4路频率可调的原理分析

1标题说不清楚,简单点说就是一个定时器输出4路可调节频率的pwm。2这个功能能干嘛?一般是用于控制多个步进电机。这样做一个定时器就可以控制4个电机了。先上代码吧u16 capture = 0;vu16 CCR1_Val = 32768;vu16 CCR2_Val = 16384;vu16 CCR3_Val = 8192;vu16 CCR4_Val = 4096;voi...

2019-03-29 17:03:47 2573 8

原创 stm32-A4988驱动步进电机

步进电机,不多做解释,百度一大堆,虽然写的都一样。1.步进电机用的2相四线,下面是某淘宝图片。2.驱动器是A4988模块,据说是3d打印机专用。灰色的脚可以悬空,也可以用上。ENABLE 使能 1停止STEP pwm(50%) 控制速度 (频率范围:我试了下大概1Hz-1KHz都可以跑的,当然频率越慢,电机相当于静...

2019-03-28 09:26:41 12493 7

原创 stm32 adc的dma传输案例

dma不多说了,原理啥的网上一大推,源码也有注释,理解起来很容易案例是传输adc的4个通道,需要多个或者其它的,照着修改就行。#define ADC1_DR_Address ((u32)0x40012400+0X4C) //ADC数据的地址u16 ADC_buf[4]; //DMA传输BUFvoid adc_dma_init(){ GPIO_InitTypeDef GP...

2019-03-21 10:46:12 2110 4

原创 STM32一个定时器输出不同频率

1个定时器输出4路频率相同,占空比不同的PWM比较容易实现,只需要改变每个通道的比较值就可以了要想输出频率不同,占空比相同,需要用到比较模式,当比较成功IO翻转。同时还需要用到定时器中断去重新设置比较值。稍微解释下面语句:Period是计数值prescaler是对总线时钟的分频这个函数是设置比较值基本要点是理解上面这些。没接触过定时器的会比较抽象,不能理解。...

2019-03-20 17:18:49 6103

原创 C语言枚举内存占用

enum 枚举是一个C语言比较常用的一个类型,是节约内存的一种方式,一般用来表示类型,类型之类的作用。为什么说enum能节约内存呢? 这个就和enum的内存分配有关系了。 首先先看实验现象:实验1:实验1结果:这里可以看到这个枚举只占用了1个字节。实验2:实验2结果:这里可以看到还是一个字节实验3:实验3结果:这里可...

2019-03-19 18:04:36 11134 10

原创 MFC中picture控件上面绘制波形

 在picture控件上面绘制波形,主要通过控件DC来绘制,通过随机数获取新的点,通过定时器来刷新界面。首先在MFC界面中放一个picture控件,大小尽量拖大点。在程序初始化的地方初始化随机函数种子 // 以时间为种子来构造随机数生成器 srand((unsigned)time(NULL)); // 启动定时器,ID为1,定时时间为200ms...

2018-12-03 16:27:47 2152

原创 html页面实时刷新显示服务器数据

   在上一篇中我说到浏览器和服务器交互数据,是实现了服务器发数据给浏览器,并在页面上显示,但是是通过按钮点击刷新的,而且数据是和html页面一起发过来的,在这里我是数据放到页面数组里,然后把页面数组发给浏览器,这样会打打浪费网络资源,在处理页面数组时,单片机负载也会很大。那么有没有只交互数据,不发页面的呢?今天找了几个小时,这个是有的,用ajax.      为什么要在htm...

2018-09-28 15:43:26 26169 7

原创 c语言实现http服务器和浏览器进行数据交换

上一篇已经实现了http服务器,通过浏览器可以访问html页面。这一篇开始通过浏览器和服务器进行通信,主要用post请求。post请求格式如下POST /index.html HTTP/1.1Accept: text/html, application/xhtml+xml, image/jxr, */*Referer: http://192.168.0.105/index.html...

2018-09-27 19:42:59 3453

原创 c语言编写http服务器

一直想弄一下http服务器,一直没有深入的去看http协议。昨天研究了一天,查看源码和优化,终于实现了。也稍微的理解了一下http协议。身为一个嵌入式工程师,需要了解http协议吗?显然是必要的,例如:你有一个网络设备,必要需要设置和获取一些参数,你可以使用如串口之类的通讯总线,不过实现起来并不简单,需要实现上位机和下位机程序,协议还得自己编写和解析,如果上位机要有界面的话,还得做...

2018-09-27 10:26:24 13542 4

原创 stm32-esp8266驱动程序

esp8266模块是串口通讯,通讯的协议是AT指令,要正确的配置对应的AT指令模块才可以工作,这里就需要知道AT指令有没有配置成功,这个比较容易实现,一般发送AT指令配置成功的话,芯片都会返回至少一个OK,当然还有其它数据,我们只需要去解析有没有接收到OK就知道指令发送是否成功了。我这里是作为TCP客服端,所以只需要以下一些指令即可:1>> 发送 AT\r\n 返回 "O...

2018-09-20 10:49:46 8562 1

原创 stm32 Ctext-M3内核最简单的多任务RTOS

   RTOS 实时操作系统,我做的是一个多任务的操作系统,可以同时运行多个任务,我这里设置的最大任务数是32个,估计跑30多个任务的嵌入式设备很少吧,32个任务够用了。OS我把它叫做HesOS,主要功能如下,比较简单。1--实现多任务调度2--实现任务调度锁3--实现临界区保护4--实现读取cpu使用率(这个功能比较重要的)5--实现us延时(用于模拟如IIC总线模拟...

2018-09-14 18:01:51 2170 1

原创 DM9015网卡uip移植到stm32

DM9015网卡是用于嵌入式设备的某网卡,使用spi接口通讯。图片某宝偷的。这个模块内部不带网络协议栈,像TCP/IP  UDP啥的都是没有的,需要自己编写或者,移植开源的协议栈。我这边主要参考官方历程移植优化精简的uip移植。因为官方的历程占用内存太大了,编写混乱,关键还是写的http历程,http没搞过,不懂那协议啊,只能自己一步步裁剪,只处理TCP原始报文。芯片:stm3...

2018-08-23 17:33:26 1096

原创 自己编写USMART调试组件

关于USMART调试组件,用过的大家都不陌生,应该是出自于原子哥的教程。因为我百度一看全是原子哥的源码,原子哥这个模块写得确实不错,让我吸取了不少。不过最近发现这个组件有一个很大的问题,函数所有的参数都是int,也就是说所支持的函数不能有其他数据类型,比如常用的float。数据类型这么多,其实用到的就是int和float。(说明:虽然可以用其它方式来弥补,但是还是让人不舒服)下...

2018-08-22 15:37:42 1884

原创 c语言的函数指针和void *指向函数

/* 首先要先理解两个类型的区别。 先说函数指针: void (*fun)(void);     这个就是一个函数指针了,函数的参数为空 void (*fun)(int); 这个也是一个函数指针,函数参数有个int 来看看void*类型: void *fun; 这样定义看起来很抽象,有没有,对于没有用过空类型的同学来说, 这样定义确实会让人一脸...

2018-08-22 14:52:12 9128

翻译 轻量级嵌入式uip协议函数简单阅览

本章供自己复习使用,只是介绍一些标准的函数,不介绍移植过程,也不介绍uip协议。有基础的人一看就明朗。没基础的可以看看这篇百度文库,非常适宜:https://wenku.baidu.com/view/a9f222f09e3143323968938c.htmlUIP简单使用个人总结注:质料来源于网络部分函数:uip_acked() 一个数据包到达,确认先前发送到数据uip_...

2018-08-18 17:58:56 1179

原创 一阶互补滤波应用到stm32 ADC采集上

大家都知道,adc采集,不管分辨率高低,特别是采集电压电流的值都是有一定漂移的,比如漂移个100mv左右是很正常的现象。很多人都是用平均滤波法,这里我想说的是其实没有用,我之前就一直用的这个,真心效果很差。其实这个问题可以用   平均滤波   加  一阶互补滤波  比较完美的滤除波动。我这边只用平均滤波漂移在100mv,加上互补滤波后漂移基本只有10mv。已经算是相当完美了。放小1...

2018-08-01 18:11:40 3864

原创 c语言位结构体的使用

作为嵌入式程序员,位结构体可以说是非常的重要,因为这样可以让你节约大多的内存。具体就不介绍了,看看代码应该都能懂了。#include "iostream"//位结构体的使用#define u8 unsigned char #define u16 unsigned short//位结构体struct data{ u8 flag1: 1; //占用1位 所有最多表示0或...

2018-07-20 17:28:34 1124

原创 python中串口数据的处理

import serialser=serial.Serial("COM3",115200,timeout=0.5) #打开串口print("我要开始了:")while (1): ch=ser.read() str1=ch.decode("iso-8859-15") #bytes转str if(str1): #判断数据是否为空,很重要 l=ord(str1) #str转in...

2018-05-29 16:08:57 4745

原创 python中的getch(),以及bytes转str

python中输入的字符都不是utf-8,所以要和c语言一样处理输入字符必须转码成utf-8import msvcrt #用于getch()while(1): print("请输入:") ch=msvcrt.getch() #键盘输入的是bytes print("%d"%(ch[0])) print(ch) str1="123" #bytes(str1, encoding ...

2018-05-29 14:01:30 6483

原创 MFC中tab control

新建一个MFC对话框程序新建3个对话框添加一个tab control控制,调整好大小为tab control控件添加变量m_tab首先去边框,为下面两个对话框添加类d1,d2新建变量在初始化函数中// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FAL...

2018-05-18 11:25:44 1095 1

翻译 MFCpicture波形绘制

这里先吐槽一下CSDN,更新之后各种bug,复制的东西还不能撤销,删除还删不全,经常写着写着格式就出问题,网页还会死掉,然后又要重新写。完全不如以前的老版本,除了能复制图片,一无是处。不是我们不想写好文章,写好文章需要时间,你这样别人几个小时写好的文章被你这样一弄,谁还有兴趣写第二遍?首先在界面上添加picture控件。初始化 // 以时间为种子来构造随机数生成器 srand((u...

2018-05-05 10:45:09 2551

翻译 MFC添加键盘鼠标事件

可以通过重载虚函数PreTranslateMessage()对所关心的消息进行截取与响应:以下对截取与响应键盘 Enter 消息的截取与响应这是对话框的响应键盘 Enter 消息方式:BOOL C**Dlg::PreTranslateMessage(MSG* pMsg){  //判断是否为键盘消息  if (WM_KEYFIRST <= pMsg->message &&...

2018-05-04 11:33:24 1223

原创 stm32最简单的实现BootLoader

    BootLoader大家应该都知道是干什么的,简单的来说就是程序开始运行前的一段程序。在成熟的产品中,通常都是采用BootLoader方式来升级产品的程序。也就是IAP升级。在了解完基本的实现原理后,可以做到用上位机升级(一般的产品大多采用这种方式,显得非常专业有专用的升级软件,其实背后原理就是BootLoader升级方式)。当然还有一些联网在线升级也是如此。网上有非常多的文件有介...

2018-04-28 12:58:39 21236 10

原创 如何合理的运用stm32的flash内存

关于stm32的flash操作,网上已经有很多详细的介绍了,这里只是总结一些告诫。在使用flash存储数据的时候,对于新手来说,并不知道该把数据存在哪一个地址上,怕存到程序区域,或者越界。关于这一点很容易搞清楚,首先我们需要看我们编译出的程序有多大。上图可以计算出程序的大小,bin=Code+RO+RW                                            1798...

2018-04-27 10:35:40 1616

原创 stm32模拟输出PPM信号

PPM信号周期为20ms,分成10分代表10个通道信号,也就是2ms代表一个信号。0.5ms代表一个通道信号的开始,所以0.5ms-2ms为通道范围控制。 LED p1('A',8); //IO口初始化,这里就不介绍了,推挽输出u16 count=0;u16 pwm_count=1000; //总计数 周期20ms,20us进次u16 pwm1=25; //0.5msu16 pwm2=3...

2018-04-14 11:42:50 6645

原创 stm32通过IO口模拟输出多路pwm

    这里主要用于控制舵机,使用TIM1模拟了5路50Hz的PWM信号,只调节占空比控制舵机角度。最大能模拟多少路没有具体测试。缺点:因为是定时器中断模拟(中断比较频繁),所以会影响main函数运行。 LED p1('A',8); //IO口初始化,这里就不介绍了,推挽输出 LED p2('A',9); LED p3('A',10); LED p4('A',11); LED p5('A'...

2018-04-14 10:37:59 13989

原创 stm103c8t6 tim1四个通道配置速度不一样(已解决)

使用这款芯片利用TIM1输出四路PWM信号,在改变占空比的时候发现CH1速度正常,CH2,CH3,CH4会有少量延时才会生效。目前没有找到问题所在原因,有大牛知道可以在下面回复下小弟。下面是代码。void PWM4_Init(u32 arr,u32 psc){ GPIO_InitTypeDef GPIO_InitStructure; ...

2018-04-13 09:49:29 1972

原创 stm32使用DMA传输9路ADC使用中断处理数据

使用中断方式的好处就是在其它地方不会调用到DMA传输BUF。如果不小心调用或修改,可能会死机。具体原因没有深究。注意中断函数是否和.s文件里面一致,否则也会死机。根据需求去修改中断函数内容。dma_adc.h#ifndef _DMA_ADC_#define _DMA_ADC_#include "sys.h"#define ADC1_DR_Address ((u32)0x40012400+...

2018-04-11 14:14:36 8705

原创 stm32使用DMA传输9路ADC

这里采集的是ADC1的ch0-ch8只需要引用ADC_buf[10]这个数组就可以,ch0数据实时保存在ADC_buf[0]中,以此列推。dma_adc.c#include "dma_adc.h"u16 ADC_buf[10]; void ADC1_DMA_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriph...

2018-04-09 16:37:34 767

翻译 正点原子stm32模拟IIC

#ifndef __MYIIC_H#define __MYIIC_H#include "sys.h"////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途//Mini STM32开发板//IIC 驱动函数 /...

2018-03-16 11:14:02 7667

原创 使用sublime开发python

1.首先下载python 什么版本都可以https://www.python.org/downloads/windows/2.下载sublime,我这里有一个中文版喜欢的拿走https://download.csdn.net/download/hes_c/102749533.安装好python之后,配置运行环境。找到我们安装的目录,复制这个目录。打开环境变量,找到系统环境变量的path,点编辑点新...

2018-03-08 10:16:21 1521

原创 MFC下的事件添加(键盘,鼠标)

1.新建一个MFC的对话框工程2.右击对话框编辑界面3.点击类向导4.选择消息栏,在下面找到你需要的事件处理,点击添加事件处理

2018-02-28 14:51:46 583

stm32 BootLoader简单跳转

BootLoader简单的跳转功能,理解基本原理,BootLoader简单的跳转功能,理解基本原理

2018-08-18

linux下kbhit函数

linux下面实现kbhit函数

2017-05-25

NRF24L01-stm32驱动

支持stm32驱动NRF24L01,带sip文件,连接好引脚做好初始化既可用

2017-12-01

linux的getch函数

linux下实现getch函数

2017-05-25

stm32串口烧录软件(DOS)

stm32串口烧录软件,更新代码非常的方便,使用官方库开发

2017-12-28

串口命令解析

解析串口内的想要的命令,解析串口内的想要的命令,解析串口内的想要的命令,

2018-02-09

linux下封装的mysql操作

mysql

2017-06-04

stm32烧写源码(dos)

stm32烧写源码(dos)stm32烧写源码(dos)stm32烧写源码(dos)

2017-12-28

linux下socket模板函数发送与接受

模板

2017-06-14

任意串口BootLoader程序升级

自己写的BootLoader,可以支持任意串口升级下载程序,调试程序,内含稳定的串口协议。

2018-08-18

推箱子代码

linux下推箱子游戏

2017-05-25

物联控制源码

物联网实现

2017-07-02

linux下的方块界面

界面

2017-06-04

非递归遍历二叉树

二叉树

2017-06-04

liaotians代码

linux]下的socket聊天

2017-05-25

liaotianc代码

linux下socket聊天

2017-05-25

stm32-103c8x-mini-byhes-0.1+SPL06.rar

STM32+SPL06气压计历程(包含SPL06手册) SPL06驱动是网上找的,原驱动是不能正常工作的,经过痛苦的修改,焊接,调试,终于调通。 通讯用的是IIC模式,精度确实高的离谱,比BMP280高出一个世纪。

2020-03-31

从0使用TCP手撸http服务器六源码

从0使用TCP手撸http服务器六源码 上篇我们说到通过路由去返回不同的html页面,如果每一个页面都是一个数组的话,那么我们可能需要很多数组,里面很多内容都是一样的,这样子会浪费我们单片机很多flash,我们需要把共同的部分固定出来,每个页面不同的部分才定义一个数组

2023-03-28

stm32c8t6运行精简freertos

版本:FreeRTOS V9.0.0 目前主要优化了系统的资源占用,编译情况如下,代码控制在10K,RAM控制在7K,

2022-08-22

templateLVGL物理按键.rar

正点原子mini开发板加屏幕 演示视频:https://www.bilibili.com/video/BV1yT4y1F7Zp?from=search&seid=2354469538140714037&spm_id_from=333.337.0.0

2021-10-14

stm32-PN532串口驱动

stm32-PN532串口驱动,读写NFC卡片,非常简单实用的驱动

2019-04-13

c语言实现http服务器和浏览器进行数据交换

c语言实现http服务器和浏览器进行数据交换,使用post请求

2018-09-27

c语言实现http服务器

学习和理解http服务器的原理

2018-09-27

最简单的stm32 RTOS

RTOS命名为HesOS,实现多任务切换,移植超简单,1ms调度一次, 实时性非常高

2018-09-14

c语言实现http服务器浏览器实时刷新数据

c语言实现http服务器,浏览器页面上实时刷新服务器的数据

2018-09-28

stm32-esp8266客户端驱动

stm32-esp8266客户端驱动,用于其它模式,也比较容易修改。

2018-09-20

stm32-DM9051-uip

stm32-dm9051最简单历程,用uip实现,实现最简单的tcp透传

2018-08-23

USMART调试组件源码学习

USMART调试组件源码学习,支持多类型参数,原子哥只支持int,本组件支持float和int共存,注释很全。

2018-08-22

stm32-103c8x-mini-byhes-0.1+bmp280.rar

STM32+BMP280气压计IIC历程 使用IIC模式,高度效果一般,用到四轴上短时间(几十秒)基本能在1米以内,效果感人。

2020-03-31

stm32-adc-dma传输案例

stm32-adc-dma传输案例,传输4个adc数据到一个数组里面。

2019-03-21

stm32-103c8x -定时器4路freq可变

stm32一个定时器输出四路pwm,占空比固定50%,频率可变,一般用于多个步进电机控制

2019-03-21

stm32-BootLoader程序和app程序合并程序DOS+MFC

stm32-BootLoader程序和app程序合并程序DOS+MFC,可以合并BootLoader和app程序,有DOS和MFC两个程序

2019-04-18

空空如也

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

TA关注的人

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