![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 86
追梦的魂影
电气专业出身,从数据库,C#开发到嵌入式开发,再到硬件设计,又继续玩人工智能,自动驾驶,全栈型工程师
展开
-
C语言修饰符
类型修饰符类型修饰符必须放在它所修饰的类型名zhi原创 2014-05-27 15:56:16 · 6018 阅读 · 0 评论 -
工程师表白神器--炫彩心形DIY
这段时间做了个玩具,用彩色LED搭建了一个心形图案,并用STC51单片机驱动,实现心形LED炫彩闪动,超级炫酷的,总工有32个灯,使用了单片机的所有IO口,可以灵活控制每个LED的闪烁,然后配上适合的音乐,绝对是屌丝工程师表白神器原创 2015-10-23 10:44:13 · 8099 阅读 · 0 评论 -
modbus通讯协议解析
1.什么是modbus协议,主要应用在哪些方面?(来源于:http://www.emtronix.com/product/ModBus_software.html) Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控转载 2015-10-09 21:54:56 · 6486 阅读 · 2 评论 -
STM32GPIO推挽模式注意
STM32推挽模式:_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的这种模式用的情况还是比较多的,但是有个注意的地方,不是所有情况都适用于推挽模式,比如当外部有外加上拉电阻时,若使用这种模式,无论输出什么电平,外部IO一直位高电平特别是有几个引脚连接到了仿真器接口,一般是有上拉的,在测试时要注意这几个IO口 GPIO_InitStruct原创 2015-10-25 23:28:21 · 1952 阅读 · 0 评论 -
基于51单片机modbusRTU从机设计
在了解modbus协议后就是基于该协议的设计了,下面先说一下基于航太电子HTM52单片机的从机设计。设计思想如下:modbus协议是以主从的方式通信的,也就是上位机发送指令,下位机应答机制,发起通信的一直是上位机,下位机只要应答就好了。modbus协议被设计出来是针对PLC应用的,这里我们可以简单的模拟PLC环境,可以在单片机里面设计一块共享区,该区域是上位机和下位机共享的,均可以读取或写入该区域的值,所有的modbus协议都是针对该快区域的操作,下位机也是根据这块区域的值做相应的操作。原创 2015-10-11 16:43:52 · 28413 阅读 · 6 评论 -
PID 控制从模拟到数字变换方法
网上有很多对PID算法的讲解,对PID从模拟到数字变换方法也有不少描述,但是就是太多了,导致很多不准确甚至错误的也进来了,导致对初学者很难理解PID算法,特别是对P,I,D这三个参数怎么来的也很模糊,下面给出一种我觉得可以让人信服的计算方法原创 2015-10-12 21:59:10 · 2681 阅读 · 0 评论 -
stm32 TIM1PWM多通道捕获模式测速
因为一个项目的要求,需要测速,之前就想学一下stm32的捕获模式了,借这个机会,刚好利用一下,现在分享出来。硬件:MCU:stm32f103zet6平台:航太电子流行7号智能小车显示:mini12864软件:语言:C语言IDE:keil5测速部分环境是典型的测速方法,测速码盘加光电对管,单片机采集光电对管模块传来的PWM波,要对两个轮子测速,实际速度原创 2015-12-27 20:25:37 · 21622 阅读 · 17 评论 -
C语言模拟C++方式读取串口操作实现
在使用C++编程对串口操作时,经常有用到serialport.read(),serialport.print()之类的函数,而且系统自带接收buf,不用考虑数据漏失的问题,那么在C语言环境下,怎么做呢?特别是51或STM32编程,或者要将C++代码转换成C代码时对这一块也不好移植,下面提供一个API,方便大家使用。首先看接口文件,也就是头文件:serialpoortAPI.h#ifnd原创 2016-01-12 15:11:28 · 6287 阅读 · 2 评论 -
wifi模块ESP8266_AT arduino 库文件部分方法解析及优化
一直想使用arduino平台来控制ESP8266模块,现在终于差不多实现了,从网上找来了一个相关的库文件,已经实现了大部分功能,但仍有部分功能需要优化,比如smartlink部分未加入。在这里首先感谢ITEAD提供的文章帮助,http://www.arduino.cn/thread-7540-1-1.html。我的平台是arduino uno ,只有一个串口,为了方便仿真,我选择使用软件来原创 2016-01-05 18:17:58 · 11132 阅读 · 2 评论 -
基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接
一直想把wifi模块和stm32连接起来,但是网上找了很久,并没有C语言相关的库,只有基于arduino的ESP8266 C++库,这个库是没办法直接给stm32使用的,所以自己动手丰衣足食,自己手动将基于arduino的ESP8266 C++库移植成简单的C库,方便使用,目前这个库实现了基本的功能,可以实现波特率修改,smartlink,断线重连等功能,wifi模块主要运行在STA模式。因为原创 2016-01-12 16:21:55 · 19792 阅读 · 0 评论 -
字符串与整数、浮点数、无符号整数之间的转换常用函数
atof(将字符串转换成浮点型数)表头文件 #include 定义函数 double atof(const char *nptr);函数说明atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结 束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123转载 2016-01-13 22:37:50 · 3913 阅读 · 0 评论 -
基于HTM-52万能遥控破解
不同型号的遥控器使用不同的红外协议,那怎么做一个万能遥控破解器来实现对所有遥控的破解呢,这里介绍一种简单粗暴的方法。原创 2015-10-08 21:28:49 · 1109 阅读 · 0 评论 -
51单片机单串口同时实现AT指令和调试信息输出
很多外部模块是使用串口的方式与单片机通信的,但有的单片机只有一个串口,且不能硬件仿真,比如我使用的STC90C516,如果将唯一的串口给了外部模块,就不能打印调试信息了。不过如果是使用AT指令只这样的模块,比如蓝牙SPP,WiFi模块,是使用AT指令的方式通信的我们可以保留单片机串口与PC的连接,串口同时与模块连接,这样单片机的发送信息同时被模块和PC收到了。模块只对AT指令有反应,对其他格式不正确的指令无反应,原创 2015-10-20 22:45:29 · 6870 阅读 · 2 评论 -
单片机串口发送数据帧
很少看到有资料写如何以中断的方式发送一帧数据,如果以等待的发送数据帧,对高速运行的单片机来说是很浪费时间的,下面就介绍一种使用中断方式发送数据帧,操作平台采用51 mcu原创 2015-09-30 20:35:25 · 14457 阅读 · 1 评论 -
STM32 GPIO模式介绍
本文转载于 http://blog.sina.com.cn/s/blog_4d1854230101ciz1.html一、GPIO口简介1.1 一般来说STM32的输入输出管脚有以下8种配置方式:输入① 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别② 带上拉输入_IPU ——IO内部上拉电阻输入 ③ 带转载 2015-06-25 16:03:52 · 1151 阅读 · 0 评论 -
C51中遇到一个有关data与xdata的问题,已解决
环境:我在某个C文件定义了一个结构体变量,然后该变量只是在本文件内被一个函数使用,然后又在中断中调用了该函数,目的是改变一个IO口的输出状态,结果执行时怎么也达不到要的效果。struct BE{ unsigned int CountFR; //定时器计数值,通过改变计数值改变音频频率 unsigned char PWR_time; //开启时间,单位为10mS unsigned原创 2015-06-04 22:58:20 · 4885 阅读 · 0 评论 -
STM32M CUBE实现printf打印调试信息以及实现单字节接收
在写单片机程序时我们一般喜欢使用printf来通过串口打印调试信息,但这个函数是不可以直接使用的,必须做点对库函数的改动。STM32M CUBE是ST官方提供的库以及初始化工具,很好很强大,但是在UART方面值提供了如下函数:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint原创 2015-06-28 19:09:37 · 3174 阅读 · 0 评论 -
stm32f103串口实现映射功能
在实际开发中,经常遇到串口的默认输出IO口被其他模块占用了,所以我们要用到串口IO口映射功能,是指将原来实现功能的IO口映射到其他指定IO口,其他不变。具体操作如下:先贴出默认下的串口初始化设置:void USART1Conf(u32 baudRate){ USART_InitTypeDef USART_InitSturct;//定义串口1的初始化结构体 GPIO_InitType原创 2015-07-01 18:12:27 · 5990 阅读 · 1 评论 -
10种软件滤波方法的示例程序
10种软件滤波方法的示例程序(JKRL) 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */#define A 10char value;char fil转载 2015-08-25 13:41:07 · 666 阅读 · 0 评论 -
巧妙使用static 为数据打包并发送
只要做过项目的朋友对关键字static应该都有一些了解,但未见了解很全面的。在C语言中,关键字static有以下明显的作用:1.static变量分配到静态内存中,这一点和全局非静态变量相同。2.在函数体,static变量只要不进行修改操作,在被调用过程中其值将保持不变。3.在模块内,全局static变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量,具有私有特原创 2015-08-25 13:45:58 · 1507 阅读 · 1 评论 -
keil编译后生成的M51文件解析
通过*.m51文件我们可以清楚的看到单片机存储器的使用情况,以及可以看到每个变量包括局部变量的位置。之前碰到一个问题,同样的程序,在small模式下编译后运行没问题,但在large模式下可以编译,但是运行出错。最后查看m51文件,发现了问题,在一个对时序要求很严格的地方声明几个局部变量,这几个局部变量有的被分配到data中,有的分配到xdata,在xdata中的变量访问时间要大于data中,导原创 2015-07-17 23:17:44 · 12048 阅读 · 0 评论 -
TFT液晶屏使用自建的英文字库
现在大部分液晶屏是不带字库的,需要吸入文字的时候,需要像画画那样,一个一个点的写,最简单的方法是需要写某个字符,就对某个字符取模,但这样灵活性太差了,下面介绍一种方法,自建字库以及驱动程式,前台应用时直接调用就好了。首先是建立字库字库的基本组成单元如下的结构体:// ------------------ 英文字模的数据结构定义 ------------------------ //原创 2015-09-29 21:09:01 · 3405 阅读 · 0 评论 -
keil C51使用串口时程序跑死的问题
在使用STC51单片机的串口时,有时候会进入一种很奇怪的情况,就是程序进入了一下子跑死了,初始化代码如下:void UsartConfiguration(unsigned int bps){ SCON = 0X50; //设置为工作方式1 10位异步收发器 TL2 = RCAP2L = bps; //set auto reload value TH2 = RCAP2H = bps>原创 2015-10-17 22:34:29 · 3316 阅读 · 0 评论 -
STC单片机timer2捕获模式测频率
在使用STC单片机测频率最常用的方法是在一定时间内计算脉冲个数,这种方式一般需要一个计数器和一个定时器配合,而且对低频信号也不太准确,下面我们可以用到timer2的捕获模式通过测量两个下降沿的时间,来计算频率,这样做仅使用timer2就好了,而且对低频信号测量准确,经实际测试,在100Hz一下时,精度可达0.05Hz。原创 2015-10-16 11:30:56 · 10557 阅读 · 5 评论 -
超声波模块HC-SR04调试经验分享
这段时间要用超声波做一个演示实验,就是使用超声波和舵机结合,做一个自动壁障演示实验。就是将超声波接到舵机上,通过转动舵机来获取各个方向到小车的距离,从而控制小车运动,避开障碍物,并寻找最佳路径。整个小车基于航太电子提供的51智能小车,如下图:车前面的超声波模块就是固定在下面的舵机上面的,实际实验时需要将显示屏取下,否则会档到舵机。下面简单说下超声波模块:HC-SR0原创 2016-03-25 23:36:21 · 72433 阅读 · 8 评论