推荐阅读最新更新时间:2024-03-16 13:25
I2C从机挂死分析和解决方法
I2C几乎是嵌入系统中最为通用串行总线,MCU周边的各种器件只要对速度要求不高都可以使用。优点是兼容性好(几乎所有MCU都有I2C主机控制器,没有也可以用IO模拟),管脚占用少,芯片实现简单。I2C协议虽然简单,实际使用过程中小毛病还不少。今天先来看一个平日最为常见的问题:I2C从机挂死。 很多事情不难而且经常碰到,每次自认为懂了但最终让你站出来说清楚的时候却总是不能自圆其说,很难受。所以我决定写博客的时候就想尽量把内容写清楚详细甚至是透彻,希望让每一个阅读博文的同学都能看得明明白白,学会一点小知识。如果还有不清楚的可以留言交流. I2C规范与特性 I2C是什么,我相信99%的同学能点到这篇博文对I2C也有了一定的了解,这里
[单片机]
STM32单片机学习---PWM输出
实现功能:采用定时器2的通道2,使PA1输出频率1K,占空比40的PWM波形,用PA8随意延时取反led灯,指示程序运行。 首先熟悉一下定时器的PWM相关部分。 其实PWM就是定时器的一个比较功能而已。 CNT里的值不断++,一旦加到与CCRX寄存器值相等,那么就产生相应的动作。这点和AVR单片机很类似。既然这样,我们要产生需要的PWM信号,就需要设定PWM的频率和PWM的占空比。 首先说频率的确定。由于通用定时器的时钟来源是PCLK1,而我又喜欢用固件库的默认设置,那么定时器的时钟频率就这样来确定了,如下: AHB(72MHz)→APB1分频器(默认2)→APB1时钟信号(36MHz)→倍频器(*2倍)→通用定时
[单片机]
基于PIC单片机的多功能电子时钟
源起 不久前做一个单片机的课程设计,主要是在液晶显示屏上显示日期时间以及温度。百度好长时间发现绝大部分都是基于51单片机的源程序,移植之后费了好长时间更改,原因是pic和51在一些细节方面有所不同。废话少说上代码,希望可以帮助到大家。 代码 程序目录 原始头文件 LCD12864头文件 DS1302头文件 DS18B20头文件 DS1302功能实现C程序 主函数main() 原始头文件 / // //__delay_us(15); //__delay_ms(15); //使用延时函数前,需定义时钟频率 #define _XTAL_FREQ 12000000 / #ifndef __LIAN_PIC_H__ #defi
[单片机]
如何才能够更好的降低单片机的高功耗问题
现在,有许多单片机应用领域,都是用开关电源模块电池供电,开关电源模块节能成为设计工程师普遍关心的问题。希望大家就这MTD2002方面展开讨论。以下提供一些MTD2002讨论的方向: 1、如何降低系统功耗?(软件?硬件?) 2、各位在这方面有何经验教训?(可以拿出来与大家分享) 3、各种芯片的功耗比较? 4、SLEEP模式应用的注意事项? 5、一些新型的节能器件的介绍? 6、其它与低功耗设计相关的话题? 进入掉电模式 现在有很多的低功耗的片子,特别是在进入掉电模式之后,只有1uA的电流。也可以使用电源管理的方法,在不工作的时候,把系统电源关断,这样更省电我用了很久51芯片,本来对它
[单片机]
《手把手教你学51单片机-C语言》之一 如何学习单片机
第1章 如何学习单片机 在错误的道路上日夜兼程,最终也无法成功,方法和思路绝对是第一重要的。一些学技术的同学,往往看到这类章节会直接跳过去,因为大多数类似章节都是废话连篇。但是,今天在这里我可以很负责任的告诉你,本章节讲到的学习单片机的方法,都是我们学习单片机的无数经验和教训总结出来的瑰宝。因为我们披荆斩棘,开辟了道路,所以可以告诉你路在何方;也因为我们摸过烧红的铁块,烫了手,所以也可以告诉你教训和代价是什么。希望各位都能站在我们的肩膀上,看得更远! 1.1 学什么单片机 单片机的型号那么多,如何选取一款合适的进行学习?如果身边有比较现成的学习单片机的条件,有什么条件就学习什么型号。比如,你所在的公司刚好用到某
[单片机]
51单片机输出PWM的两种方法
51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用。电路图见图一,采用了高速光隔(6N137)输出,并将PWM的信号倒相。 一、原理图 图一 二、固定脉宽PWM输出 用T0定时器完成PWM输出,脉宽固定:65536微妙。T0定时器设置成:16位定时器 PWM: 程序清单:(12MHz) PwmData0 ;T0定时t1所需的定时初值(字) PwmData1 ;T0定时t2所需的定时初值(字) PwmF ;PWM输出标志 ;***********************************************
[单片机]
AVR 单片机小学期 12864液晶 双人贪吃蛇游戏
我就负责编,刚开始因为12864他把管脚插错了,总是不行,刚开始我还比较急躁。 觉得他连硬件电路都搭不好我怎么编,而且眼看着只剩两三天时间就验收了。 好在后来电路搭好了(就一个管脚接错了而已!),而且我编程顺利,最后验收效果不错。 我觉得玩起来挺爽的,加速键用着爽。 算一个纪念吧。 • #include avr/io.h • #include avr/interrupt.h • #define uchar unsigned char • #define uint unsigned int • /********************端口************************/ • #d
[单片机]
单片机软件实现模拟串口方法介绍
三种单片机模拟串口方法介绍 模拟串口就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电平,也就是串口通信中所说的位,如起始位用低电平,则将其置0,停止位为高电平,则将其置1,各种数据位和校验位则根据情况置1或置0。至于串口通信的波特率,说到底只是每位电平持续的时间,波特率越高,持续的时间越短。如波特率为9600BPS,即每一位传送时间为1000ms/9600=0.104ms,即位与位之间的延时为为0.104毫秒。单片机的延时是通过执行若干条指令来达到目的的,因为每条指令为1-3个指令周期,可即是通过若干个指令周期来进行延时的,单片机常用11.0592M的的晶振,现在我要告诉你这个奇怪数字的来历。用此频
[单片机]