
嵌入式软件
张十三的博客
一个专注于电子/IT开发技术的创客媒体,主要涵盖电子基础技术,软件开发基础技术,物联网,智能家居,开源软硬件,自动控制,仿真,机器人(运动控制,ROS),无人机,机械设计等等
快用 WX 搜索并关注“张十三的博客”和张十三一起搞技术吧!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STM32 进阶教程 16 - ADC1与ADC2同步采样
前言STM32中在有2个或以上ADC模块的产品中,可以使用双ADC模式。在双ADC模式里,根据ADC1_CR1寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同步触发。注意: 在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。但是,主和从ADC的外部触发必须同时...原创 2019-07-27 22:44:01 · 22960 阅读 · 9 评论 -
STM32 基础系列教程 29 - FreeRTOS
前言学习stm32 中 FreeRTOS嵌入式实时操作系统的使用,学会在FreeRTOS时行任务创建与任务运动,学习在嵌入式实时操作系统下编程,用串口打印相应信息,并控制LED闪烁。示例详解基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。...原创 2019-05-05 14:29:33 · 3849 阅读 · 0 评论 -
STM32 基础系列教程 27 - USB_HID
前言学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。示例详解基于硬件平台: STM32F10C8T6最小系统...原创 2019-04-29 15:10:29 · 16519 阅读 · 12 评论 -
STM32 基础系列教程 26 - USB_MSC
前言学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。示例详解基于硬件平台: STM32F10C8T6最小系统...原创 2019-04-28 11:48:52 · 12670 阅读 · 3 评论 -
STM32 基础系列教程 21 - NVIC
前言学习stm32 NVIC接口编程,学会使用常用的NVIC接口函数,优改中关优先级,开/关单个中断,开/关所有中断,开/关所有中断和异常,系统软件重启等功能。示例详解基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的最小系统板...原创 2019-04-18 21:29:09 · 1536 阅读 · 0 评论 -
STM32 基础系列教程 20 - RTC
前言学习stm32 RTC(实时时钟)的使用,学会用RTC实现钟表功能。示例详解基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不...原创 2019-04-18 19:38:05 · 839 阅读 · 0 评论 -
STM32 基础系列教程 19 – WWDG
前言学习stm32 窗口看门狗(WWDG)接口使用,学会用STM32内部窗口看门狗(WWDG)接口实现程序异常时自复位功能。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。窗口看门狗由从APB1时钟分频后得到的时钟驱动(PCLK1除以4096 = 36M/4096 = 8.789K),通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。窗口看门狗通常被用来监测,由...原创 2019-04-18 19:36:56 · 2298 阅读 · 0 评论 -
STM32 基础系列教程 18 – IWDG
前言学习stm32 独立看门狗(IWDG)接口使用,学会用STM32内部独立看门狗(IWDG)实现程序异常时自复位功能。STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用...原创 2019-04-18 19:35:50 · 674 阅读 · 0 评论 -
STM32 基础系列教程 17 – CRC
前言学习stm32 循环冗余校验(CRC)计算单元接口使用,学会stm32f103 CRC应用与编程,关于CRC的基础知识请各位自行百度,STM32有些芯片的CRC多项式可自由设定,有些则是固定值0x4C11DB7,如本文所用芯片。示例详解基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生...原创 2019-04-18 19:35:01 · 5545 阅读 · 3 评论 -
STM32 基础系列教程 25 - USB_HID_mouse
前言学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。示例详解基于硬件平台: STM32F10C8T6最小系统...原创 2019-04-21 22:40:02 · 1781 阅读 · 1 评论 -
STM32 基础系列教程 24 - USB_HID_key
前言学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。示例详解基于硬件平台: STM32F10C8T6最小系统...原创 2019-04-21 22:39:08 · 2406 阅读 · 1 评论 -
STM32 基础系列教程 23 - USB_cdc
前言学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。示例详解基于硬件平台: STM32F10C8T6最小系统...原创 2019-04-21 22:38:03 · 8044 阅读 · 2 评论 -
STM32 基础系列教程 22 - CAN
前言CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通...原创 2019-04-21 22:36:57 · 5634 阅读 · 1 评论 -
STM32 基础系列教程 28 - USB_DFU
前言学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。示例详解基于硬件平台: STM32F10C8T6最小系统...原创 2019-04-30 17:10:15 · 5532 阅读 · 9 评论 -
STM32 基础系列教程 30 - 文件系统
前言学习stm32中FATFS 文件系统的基础使用,学会文件的打开及读写删除等基本操作,理解文件系统基本概念。示例详解基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的最小系统板原理图: 关于CUBEMX工...原创 2019-05-06 11:18:34 · 4590 阅读 · 1 评论 -
STM32 基础系列教程 31 – DAC
前言学习stm32 DAC数模转换接口使用,学会用STM32 的DAC接口,通过DAC接口将数字信号转变成模拟信号输出,或查看内部变量值的变化波形,学习DAC波形发生器的使用。示例详解基于硬件平台: NUCLEO-F302R8 NUCLEO板, MCU 的型号是STM32F302R8, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所...原创 2019-05-07 14:13:00 · 1954 阅读 · 0 评论 -
STM32 LWIP TCP 数据包分包后合并,超过591字节后分会分包问题
最新在使用LWIP + MQTT的应用过程中,出现一个很奇怪的问题,当上位机反送的JSON长度过大时,我的stm32收到的数据就会有问题:上图中成功接收到失败接收口相关1个字节,用wireshark看数据包长度分别是591和590:发现可能是我的接收BUFF不够大引起的,程序中有MqttRxBuff大小定义为1024,改成2048还是一样接收失败:看来问题不是在这个BUFF...原创 2019-07-23 21:19:25 · 3710 阅读 · 0 评论 -
STM32 进阶教程 8 - 位带操作
前言有过51单片机开发经历的朋友应该都对51的IO口或一些特殊寄存器可以直接按位操作的方式不陌生吧,那么在stm32中有没有类似的操作呢,答案是肯定的,本节将给大家介绍如何在STM32中实现位带操作。在《ARM Cortex-M3权为指南》中的第87页对位带操作如下描述:位带操作支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在 CM3中,有两个区中实现了位带...原创 2019-07-06 21:47:25 · 2188 阅读 · 0 评论 -
STM32 进阶教程 7 - C与C++混合编程
前言在嵌入式开发过程中经常会用到第三个芯片/设备,这些第三方的芯片提供的DEMO程序或驱动程序有时候是C++,如果先前的系统用C语言写的就会出现点问题,往往需先将C++的驱动程序自已手动改成C语言再用,本节给大家介给一下如何在KEL MDK环境中实现C与C++混合编程。本节将在《STM32 进阶教程 4 - 软件实现高精度延时 2》基础上将Delay.c变成C++实现的Delay.cpp编代...原创 2019-07-06 19:15:42 · 8472 阅读 · 1 评论 -
KEIL MDK 仿真时程序”乱跑“问题
最新有同学反应自已的程序在KEIL MDK仿真时按单步运行(F10),程序运行顺序不是按自已想要的顺序来操作的,其实这个原因多半是因为程序的编译优化等级设置较高导致:优化等级高可以减小代码空间,很多工程师会开启该选项,但也有可能会出现上面的问题,!解决办法:只需在工程设置的C/C++先项中将优化等级选为-O0即可,但可能会加大最终代码大小。...原创 2019-06-26 16:08:13 · 7509 阅读 · 0 评论 -
STM32 基础系列教程 40 - Lwip_mqtt
前言MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网...原创 2019-05-24 10:51:46 · 8580 阅读 · 7 评论 -
STM32 基础系列教程 38 - Lwip_http
前言HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的种网络传输协议,所有的WWW文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器有...原创 2019-05-17 20:41:40 · 11007 阅读 · 1 评论 -
STM32 基础系列教程 42 - SDMMC+Fatfs
前言本节我们将基于42讲 “STM32 基础系列教程 41 - SDMMC” 的基础来实现基于SD卡文件系统的文件操作。 示例详解基于硬件平台: 正点源子的stm32f4 探索者开发板,主要使用了SDIO接口和文件系统,MCU 的型号是STM32F4ZET6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的开发板及部分原理图:...原创 2019-05-27 07:34:04 · 3456 阅读 · 1 评论 -
STM32 基础系列教程 41 – SDMMC
前言 SDIO(Secure Digital Input and Output) 安全数字输入输出接口,它支持多种类型的MMC卡,如SD卡,SDIO卡,MMC卡等。STM32 的SD/SDIO MMC卡主机模块(SDIO)在AHB外设总线和多媒体卡(MMC)、 SD存储卡、 SDIO卡和CE-ATA设备间提供了操作接口。其主要特点有:● 与多媒体卡系统规格书版本4.2全兼容。支持三种...原创 2019-05-27 07:32:01 · 7107 阅读 · 0 评论 -
STM32 基础系列教程 35 - Lwip_sntp
前言NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。SNTP 简单网络时间协议(Simple Network Time Protocol),由NTP改编而来,主要用来同步因特网中的计算机时钟。换句话说SNTP是NTP的精简版,我们可以用SNTP协议来得到当前网络时间。关于NTP及SNTP的更多知识请自行查找资料。本实险主要目...原创 2019-05-12 20:46:19 · 6026 阅读 · 0 评论 -
STM32 基础系列教程 34 - Lwip_tcp_server
前言学习stm32 以太网接口使用,及LWIP使用,用LWIP快速实现一个TCP server网络通信功能, 学会基本LWIP的网络数据接收与发送功能,让初学者了解和学会使用lwip.示例详解基于硬件平台: MCU 的型号是STM32F407VGT6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的最小系统板原理图: ...原创 2019-05-12 20:44:56 · 6147 阅读 · 3 评论 -
STM32 基础系列教程 33 - Lwip_tcp_client
前言学习stm32 以太网接口使用,及LWIP使用,用LWIP快速实现一个TCP client网络通信功能, 学会基本LWIP的网络数据接收与发送功能,让初学者了解lwip(关于Lwip更多的功能介绍将会在后期的STM32 中级教程中介绍)。示例详解基于硬件平台: MCU 的型号是STM32F407VGT6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编...原创 2019-05-12 20:43:48 · 5306 阅读 · 2 评论 -
STM32 基础系列教程 37 - Lwip_igmp
前言组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。IGMP就是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。...原创 2019-05-16 16:05:22 · 3226 阅读 · 2 评论 -
STM32 基础系列教程 39 - Lwip_tftp
前言文件传输协议(英文:FileTransferProtocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,...原创 2019-05-21 17:29:26 · 5270 阅读 · 1 评论 -
STM32 基础系列教程 32 – Ethnet+Lwip
前言学习stm32 以太网接口使用,及LWIP使用,用LWIP快速实现一个UDP网络通信功能, 学会基本LWIP的网络数据接收与发送功能,让初学者了解lwip(关于Lwip更多的功能介绍将会在后期的STM32 中级教程中介绍)。示例详解基于硬件平台: MCU 的型号是STM32F407VGT6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例...原创 2019-05-11 12:14:06 · 4060 阅读 · 0 评论 -
STM32 基础系列教程 36 - Lwip_dns
前言域名系统(英文:DomainNameSystem,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。开始时,域名的字符仅限于ASCII字符的一个子集。2008年,ICANN通过一项决议,允许使用其它语言作为互联网顶...原创 2019-05-15 18:32:54 · 2007 阅读 · 0 评论 -
STM32 基础系列教程 10 - 单线串口(半双工)
前言在工程应用中,很多时间为了方便走线会采用单线串口方案,本节将学习stm32 usart单线串口的使用,学会用使用单线串口收发数据。示例详解基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的最小系统板原理图:...原创 2019-04-03 10:30:46 · 16923 阅读 · 10 评论 -
STM32 基础系列教程 15 - SPI
前言学习stm32 SPI通信接口使用,学会用SPI接口收发数据。示例详解基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不...原创 2019-04-12 14:12:17 · 2448 阅读 · 1 评论 -
单片机 10种软件滤波方法的示例程序
单片机学习笔记_10种软件滤波方法的示例程序假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */#define A 10char value;char filter(){ char ne...原创 2019-01-10 17:58:12 · 2913 阅读 · 0 评论 -
基于stm32f107 stm32cube 和 LWIP 协议实现 udp 组播通信
最近在做一个基于stm32f107 实现 UDP 组播通信的项目,项目基于 stm32cube 配置生成,如下图:UDP组播头文件:#ifndef __MULTICAST_H__#define __MULTICAST_H__#include "lwip/udp.h"#include "lwip/pbuf.h"#include "lwip/igmp.h"#include...原创 2018-12-18 21:54:13 · 6930 阅读 · 0 评论 -
lwip 开发 sntp 与 tcp 不能同时工作的奇怪问题
最近基于 stm32f107 做lwip 网络开发, 开启 dhcp 和 sntp 服务, 一个udp 并且是多播 和 一个tcp,开发是基于 stm32cube 工具生成的代码,LWIP 配置如下:工作时出现了很奇怪的问题: 如果先开 sntp ( 执行sntp_init() ) 那么 后面的 tcp 过一段时间后会无法主动发送数据,如果先开 tcp , 则 sn...原创 2018-12-18 18:35:55 · 2077 阅读 · 1 评论 -
keil 5 出现 error: #67: expected a "}" 错误解决
使用KEIL 5一段时间,发现用keil 5 打开一些比较早的工程时,会出现大量 error: #67: expected a "}" 错误:... Keil\STM32Fxx_DFP\2.2.0\Device\Include\stm32f10x.h(303): error: #67: expected a "}"解决方法:在工程属性中,c/c++ 选项中 把 Define 中...原创 2018-12-12 21:24:57 · 39157 阅读 · 24 评论 -
Beyond Compare 3 许可证密钥被撤销
最近在使用 Beyond Compare 3 时突然出现 “许可证密钥被撤销" 问题,现象截图以下:自己清除注册表并重新安装后还是出现相同的问题,没办法只能求助于百度!找到解决方法:删除 “C:\Users\Administrator\AppData\Roaming\Scooter Software\Beyond Compare 3” 目录及目录中文件,然后得启软件就可。实际试了一...原创 2018-11-24 18:29:43 · 6447 阅读 · 1 评论 -
在WINDOW 系统下如何用批处理命令生成代码
如图要实现一个每次编译都会自动重新生成的代码,一般是 软件版本相关的代码最适合这种自动生成上图中需在用到编译时间和日期,来直接上代码::BEGIN@COLOR 07cls@echo off @ECHO ------------------------------------------------------------------------ @ECHO ****...原创 2018-11-17 18:05:16 · 396 阅读 · 0 评论 -
51 指令系统
目录 内部 RAM 传送指令外部传送指令程序存储器数据传送指令字节交换指令算术运算指令-加法算术运算指令-减法算术运算指令-十进制调整指令算术运算指令-乘除法指令逻辑运算类指令控制转移类指令布尔操作类指令伪指令 内部 RAM 传送指令 指令名称 指令格式 功能...原创 2018-11-23 23:37:46 · 649 阅读 · 0 评论