单片机

STM32开发 -- 低功耗模式详解

£可爱£侵袭症+ 提交于 2019-12-12 10:08:48
很多单片机都有低功耗模式,STM32 也不例外。当 CPU 不需继续运行时,可以利用多个低功耗模式来节省功耗。 这部分不是我负责,但是也是有必要看一下的。 参看: STM32F1开发指南-库函数版本_V3.2.pdf STM32中文参考手册_V10.pdf 一、低功耗模式 在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。 STM32有三种低功耗模式: ● 睡眠模式 (Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行) ● 停止模式 (所有的时钟都已停止) ● 待机模式 (1.8V电源关闭) 此外,在 运行模式 下,可以通过以下方式中的一种降低功耗: ● 降低系统时钟 在运行模式下,通过对预分频寄存器进行编程,可以降低任意一个系统时钟(SYSCLK、 HCLK、 PCLK1、 PCLK2)的速度。进入睡眠模式前,也可以利用预分频器来降低外设的时钟。 ● 关闭APB和AHB总线上未被使用的外设时钟。 在运行模式下,任何时候都可以通过停止为外设和内存提供时钟(HCLK和PCLKx)来减少功耗。为了在睡眠模式下更多地减少功耗

我的手工制作PCB板

牧云@^-^@ 提交于 2019-12-11 22:14:29
为了更好的分享,本人因最近闲得慌,无聊,没事偶尔来写写博客,这是我第一次,第一篇的博客,望大家多多包涵! 以下所展示的作品图片,是我近几年玩电子的收获,不管实训,毕设还是个人爱好,所用的PCB板都是从制图到打印PCB图,再到热转印机上转印到覆铜板,再到把印好的覆铜板丢到腐蚀液中腐蚀,留下所要的线路以及焊盘,接下来清洗干净将腐蚀好的PCB板拿去打孔,接下来安装元件并焊接,最后调试。以下是我的制作PCB板的设备: 图1 我的PCB制板设备 由于图1中的转印机太笨重,不方便携带,所以现在改用在某宝上淘来的小熨斗,就一个手掌大,这个更方便携带,不过印制起来比较费劲,没办法,再怎么费劲也挡不住我制作PCB板的乐趣。 图2 在某宝里淘来的小熨斗 同时图1中的腐蚀机不方便携带,改用了在宿舍常用的洗脸盆,到小卖部随便买个几块钱的盆,问题就是腐蚀速度慢,不必腐蚀机快,还需要人工配合手动摇动盆里的腐蚀液,加快腐蚀,没办法就这样将就吧。 图3 PCB板在洗脸盆中泡着 一、基于51单片机实现的电子琴PCB板展示 这是在学校单片机实训做的PCB板,发现有个疑问,正面的丝印怎么印的呢?其实印制的方法很简单,跟普通印制PCB图一样的方法印,关键在于怎么把这些丝印打印下来印制。印上这层丝印目的是为了方便安装元件,就不需要看着电脑对着安装了。 图4 电子琴PCB板的正面

单片机基础知识必备

半城伤御伤魂 提交于 2019-12-11 11:31:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 单片机概述 什么是单片机(What is Microcontrollers?) 单片机就是一块集成在硅片上的微处理器、存储器以及各种输入输出接口的芯片,这样一块芯片就具备了计算机的属性,因而被称为单片微计算机。其事就是一块集成芯片,但是这块集成芯片具备特殊的功能,这些功能我们可以靠我们自己编程自定义,编程的目的就是使它的各个引脚在不同的时间可以输出不同的电平,进而控制连接到这个单片机各个脚的外围电路的电气状态。 百度百科: 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时

从零开始51单片机学习教程----经验杂谈

白昼怎懂夜的黑 提交于 2019-12-11 10:37:59
大学四年白混了四年,如今要毕业了。学习单片机,也算是工作前的准备。单片机对于工科类的学生来说真的很重要,这点到现在才明白。写个贴,主要是为了分享一下自己在学习单片机过程中遇到的各种新手入门所遇到的困难,如果能够帮助到一起学习单片机的同学那实属荣幸。 第一步:学习单片机一定要看书,刚开始从书中大概了解单片机各管脚、各个功能寄存器是干什么的、能实现什么功能就够了,这个非常重要,因为控制单片机的核心是用程序去控制单片机的各个功能 寄存器,给寄存器赋值二进制数据0或者1。单片机书有很多,但也不是每一本都适合入门学习,可以看看王云51单片机教程,书带的云龙51教学视频比较全面。 第二步:在电脑上安装上必备的软件(Keil编程软件和STCisp下载软件),找一块开发板开始实践,刚开始可以跟着教学视频操作,边看边练习,不懂的再查一下资料或书本。下载参考程序,并修改参 考程序,从最简单的交通灯实验开始,在实践中不断的积累新知识。 第三步:进行一些小制作,来开拓思维。可以在面包板上搭建各中小电路,当你能做自属于自已风格的产品时,你已算是高手了。 来源: https://www.cnblogs.com/clrystal/p/12020677.html

直流电机控制系统

浪尽此生 提交于 2019-12-10 09:52:40
直流电机控制系统 第一部分 课程设计概述 1.1 课程设计的目的与任务 1.2 课程设计题目 1.3 设计功能要求 1.4 课程设计的内容与要求 1.5 实验仪器设备及器件 第二部分 设计方案工作原理 2.1 预期实现目标定位 2.2 技术方案分析 2.2.1系统框图 2.2.2电路工作原理 2.2.3控制算法原理 2.3 功能指标实现方法 2.3.1 实现方案分析 2.3.2 基本模块原理 第三部分 核心部件电路设计 3.1 关键器件性能分析 3.2 电路工作原理 3.3 电路驱动接口说明 第四部分 系统软件设计分析 4.1 系统总体工作流程 4.2 程序设计思路 4.3 关键模块程序清单 4.3.1编码器测速 4.3.2五向按键检测 4.3.3 OLED显示 4.3.4 PID控制 4.4 调试分析 4.4.1 总体说明 4.4.2 PID算法调节分析 第五部分 心得体会 第六部分 附录 Ⅰ 参考文献 Ⅱ 电路原理图 Ⅲ 核心源代码 本次应用系统课程设计主要涉及 基于STM32编程 、 直流电机的驱动 和 PID控制 的应用,根据课程设计要求完成了基于PID算法的简单直流电机调速练习,本系统目前还可以继续完善,有相当多的功能可以继续添加。另外,对于PID算法的调参问题一直是困扰做项目的人,后来我们采用Matlab&Simulink仿真的方式,大大缩短了参数整定的时间

计算机三级嵌入式学习笔记

江枫思渺然 提交于 2019-12-10 00:18:39
嵌入式学习笔记(之一) 前言 ​ 笔者在大一下学期一时冲动,直接跳过计算机二级报名考计算机三级嵌入式。没错,我觉得我冲动了,当时想着接触一下嵌入式,学点皮毛也好,考个证下来就更好了,结果,看书做题,发现,我高估自己了喔。 ​ 八十块钱报名费极大可能打水漂,但看完书还是认认真真的把题库刷一遍吧,前面八十分基本全是概念啊,全是啊,我滴天,孩子最不擅长的就是背这些balabala的,哭了,孩子快哭了啊!!!太难啦!!! ​ 做过题记一下笔记吧,加深些印象也好,呜呜呜~ 大致提纲 一、嵌入式系统概论 ​ (1)嵌入式系统介绍及其特性: ​ 专用性;隐蔽性;资源受限;高可靠性;实时性;软件固化。 ​ (2)嵌入式系统的应用 ​ (3)嵌入式系统的逻辑组成: ​ 软硬件两部分:硬件主体是中央处理器和存储器,它们通过输入/输出(I/O)接口和输入/输出设备与外部世界联系,并借助总线相互连接,这些硬件连同嵌入式软件一同构成完整的嵌入式系统。 ​ (4)嵌入式处理芯片: ​ 嵌入式系统的CPU一般具有四个特点:支持实时处理;低功耗;结构可扩展;集成了测试电路。 ​ (5)目前嵌入式处理芯片类型: ​ 微处理器(MCU);数字信号处理器(DSP);微控制器(单片机);片上系统(SoC)。 ​ (6)嵌入式系统的多种分类方法 ​ 可以按用途分类;按实时性分类;按产品形态分类;按系统的复杂程度分类。 ​

mac 搭建单片机开发环境

依然范特西╮ 提交于 2019-12-09 18:20:45
我的只按照下面的链接到了安装python3的前一步,安装python3以及后面还没弄。 文章参考链接如下 https://www.jianshu.com/p/d16025a34cfe 环境说明 操作系统:macOS High Sierra 这是我电脑系统的版本,理论上支持Mac的所有版本 烧录代码到单片机 安装sdcc sdcc是用于Intel 8051 Maxim 80DS390和Zilog Z80的ANSI C编译器 在Mac上可以用过 brew 来安装, brew 是Mac的包管理管理工具,就和 redhat 的 yum 和 Ubuntu 的 apt-get 一样。 安装命令: $ brew install sdcc 安装CH341驱动 开发板上默认已经集成了usb转串口模块,它上面使用的CH340芯片。但是在CH340官网上面没有找到mac系统的驱动,只找到了CH341版本的mac系统驱动,根据官方文档说明,这个驱动也兼容CH340芯片,所以安装CH341版本的驱动就可以了。 下载地址: CH341 for mac 然后将下载好的 zip文件解压打开双击运行目录里面的ch34xInstall.pkg,根据提示一直点击下一步就可以了,最后按照提示重启电脑就可以了。 怎么确认驱动安装成功了呢??? 将单片机连接到电脑上然后打开iTerm命令行窗口后执行: $ ls /dev

基于安卓的单臂机器人(二)

偶尔善良 提交于 2019-12-09 15:36:55
这篇文章主要是对硬件方面进行阐述,用到的工具软件是Altium Designer 09画电路图,Visio Studio画流程图。 系统硬件设计 整体方案概述 硬件部分是整个小车系统的核心部分,它的作用是响应APP发送来的指令,采集视频数据并将视频流推送给APP,通过单片机I/0口控制各个模块的工作,由于小车底盘空间位置有限,需要将整个系统的电路分两部分做板子,考虑到后期调试的方便,车灯、蜂鸣器、循迹、驱动模块都设置了按键开关,这样就可以分模块调试了。 硬件总体框图: 单片机模块 因为系统需要较多的pwm输出,较大的内存空间,平时使用的51单片机达不到要求,如果用STM32来做又浪费太多资源,而且对STM32不熟悉,将会给编程带来难度。于是我选用较为熟悉的单片机STC15F2K60S2,它有三个定时器,其中一个可以给串口通信使用,另外两个定时器可以给避障模块计算距离和机械臂模块控制用。另外,可以通过该单片机的PCA产生三路pwm信号,可以用于机器人速度或者其它系统功能,为了后期功能拓展,把没用到的管脚通过排针预留出来。 单片机模块电路图: 电源模块 因为用到两个电压,L298N驱动模块要用到5V和12V电压,其它模块都是用5V电压,供电电源由8个1.5V干电池组成,因此选用7805将12V转为5V。 车灯模块 和蜂鸣器控制原理相类似,因为车灯功率比较大,所以没有加限流电阻。

如何让单片连入互联网,然后进行远程操作

大兔子大兔子 提交于 2019-12-09 10:54:03
现在都在讲究什么物联网,远程监控,其实这种技术很早以前就已经存在了,比如说基于CAN总线的操作之类的东西。只是那种都是在工业中用的比较广泛而已,没有面对普通的消费者而已。 废话不多说,我们来看看今天我们要讨论的话题:单片机连入联网,然后通过计算机进行操作。 首先,你需要一个单片机的最小系统,或者你直接可以在某宝上面买一个单片机的开发板,不用很高大上的那种,你只要一个能够做开发的板子就可以了。 我们知道,计算机需要联网,你需要的是一个网络模块,无线模块或者有线的都可以,然后你就需要移植一个类似于TCP/IP的协议栈,不过这个东西已经有成熟的了,fuip这个是国人写的一个协议栈,完全适用于单片机,这里的单片机是51单片机,这种单片机便宜,随处都是,当你把程序放入到单片机以后,你就可以通过JAVA的tcp/ip的网络编程来和他进行通信,这样就可以完成各种控制了,你可以通过手机,微信,树莓派,甚至其他任何联网设备进行通信,今天就主要讲讲大概的轮廓和理论的东西,实现细节,等我彻底研究清楚了以后,源码什么的都统统发布!敬请期待! 来源: oschina 链接: https://my.oschina.net/u/257950/blog/422608

小蜜蜂单片机——实现蜂鸣器与继电器的基本控制

丶灬走出姿态 提交于 2019-12-07 17:47:34
首先让8路led指示灯闪烁3遍后熄灭,接着依次点亮led指示灯,继电器吸合一会后断开,然后依次熄灭led指示灯,蜂鸣器鸣叫一会后关闭,程序循环实现上述功能。 在上次学的led跑马灯的基础上改 # include "reg52.h" sbit HC138_A = P2 ^ 5 ; sbit HC138_B = P2 ^ 6 ; sbit HC138_C = P2 ^ 7 ; //注意是P2 void delay ( unsigned int t ) { while ( t -- ) ; while ( t -- ) ; } void ledrunning ( ) { unsigned char i ; HC138_C = 1 ; HC138_B = 0 ; HC138_A = 0 ; //Y4输出低电平 for ( i = 0 ; i < 3 ; i ++ ) //闪烁3遍熄灭 { P0 = 0x00 ; delay ( 60000 ) ; delay ( 60000 ) ; P0 = 0xff ; delay ( 60000 ) ; delay ( 60000 ) ; } for ( i = 1 ; i <= 8 ; i ++ ) //led依次点亮 { P0 = 0xff << i ; delay ( 60000 ) ; } for ( i = 1 ; i <= 8 ; i ++