【单片机】OneWire通信协议
一、OneWire(单总线)协议
•单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线
•一根通信线:DQ
•异步、半双工
•单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线
二、单总线电路规范
•设备的DQ均要配置成开漏输出模式
•DQ添加一个上拉电阻,阻值一般为4.7KΩ左右
•若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路
三、单总线的时序结构
蓝桥杯相关
OneWire底层
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include "onewire.h"#include "reg52.h"sbit DQ = P1^4; //单总线内部延时函数void Delay_OneWire(unsigned int t) { t *= 12; while(t ...
【单片机】IIC通信协议
一、单片机通信基础概念
全双工和半双工的区别:
一、全双工(Full Duplex)通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。
二、半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。
MCU中常见的通信协议:
二、推挽输出和开漏输出
推挽输出:
推挽输出结构是由两个MOS或者三极管收到互补控制的信号控制,两个管子时钟一个在导通,一个在截止,如图1所示:
特点:
推挽输出可以输出高电平和低电平,在两种电平下都具有驱动能力。
相比于后面介绍的开漏输出,输出高电平时的驱动能力强很多
缺点:推挽输出不能实现" 线与"。
开漏输出:
常说的与推挽输出相对的就是开漏输出,抽象地说就是COMS反相器去掉了NMOS部分,PMOS管漏极输出,即开漏输出。PMOS管由高电平导通输出低电平,高电平没有驱动能力,需要借助“上拉电阻” (一般上拉电阻值较大,即弱上拉模式)什么是弱上拉?
开漏输出的另一个优点在于 ...
【51单片机】AT24C02(EEPROM储存)
2.26更新
基本概念
#前置概念
所用外设:
AT24C02(EEPROM储存) 使用IIC协议
一、单片机通信协议(本文以IIC为重点)
全双工和半双工的区别:
一、全双工(Full Duplex)通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。
二、半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。
MCU中常见的通信协议:
二、推挽输出和开漏输出
推挽输出:
推挽输出可以输出高电平和低电平,在两种电平下都具有驱动能力。
相比于后面介绍的开漏输出,输出高电平时的驱动能力强很多
缺点:推挽输出不能实现" 线与"。
开漏输出:
常说的与推挽输出相对的就是开漏输出,抽象地说就是COMS反相器去掉了NMOS部分,PMOS管漏极输出,即开漏输出。PMOS管由高电平导通输出低电平,高电平没有驱动能力,需要借助“上拉电阻” (一般上拉电阻值较大,即弱上拉模式)什么是弱上拉?
IIC为什么要开漏输出模式 ...
【stm32单片机】[5]定时器控制PWM
配置结构体初始化输出比较单元
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
设置结构体初始值
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct);
*配置强制输出
void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC2Config(TIM_TypeDef* ...
【微机原理】[1] 文件寄存器RAM
课堂记录
配置位
【stm32单片机】[4]定时器中断
打开RCC内部时钟
选择时基单元时钟源
配置时基单元
配置输出中断控制,允许更新中断输出到NVIC
配置NVIC,打开定时器通道,并分配一个优先级
运行控制
相关函数
恢复缺省配置
TIM_DeInit(TIM_TypeDef* TIMx);
时基单元初始化
TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
TIMx:选择定时器
TIM_TimeBaseInitStruct:结构体,定时器有关的配置
结构体初始化
TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
使能计数器,对应运行控制
TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
中断输出使能控制
TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, Func ...
【stm32单片机】[3]EXTI外部中断
stm32的中断结构
NVIC
STM32中的NVIC详解_stm32 nvic-CSDN博客
EXTI
一、对射式红外传感器计次
红外传感器底层程序
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include "stm32f10x.h" // Device headeruint16_t CountSensor_Count; //全局变量,用于计数/** * 函 数:计数传感器初始化 * 参 数:无 * 返 回 值:无 */void CountSensor_Init(void){ /*外部中断的定义*/ /*开启时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB ...
【stm32单片机】[2]stm32GPIO输出
GPIO输入
一、LED闪烁
123456789101112131415161718192021222324252627#include <stm32f10x.h> //Device header#include <Delay.h>int main(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置GPIOA外部时钟 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//一般输出用推挽输出模式 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 ; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); //四个基本的输出电平设置函数 //GPIO_SetBits(GPIOA,GPIO_Pin_0);//LED ...
【stm32单片机】[1] stm32工程创建
stm32点亮LED
一、配置寄存器方式
1234567891011#include <stm32f10x.h> //Device header int main(void){ /*使用配置寄存器的方式进行点灯操作*/ RCC->APB2ENR = 0x00000010; GPIOC->CRH = 0x00300000; GPIOC->ODR = 0x00002000; //缺点:配置繁琐,操作多}
二、库函数方式
12345678910111213141516171819202122#include <stm32f10x.h> //Device headerint main(void){ /*使用库函数的方式进行点灯操作*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//配置GPIOC的外设时钟 //函数的本质还是配置寄存器,但是封装好了完整可靠的功能 //不会影响到寄存器的其他位,不需要手动计算寄存器 GPIO_InitTypeDef GPIO_Ini ...
【数学建模】[1]线性规划
1234c=[2;3;1];a=[1,4,2;3,2,0];b=[8,6];[x,frav]=linprog(c,-a,-b,[],[],zeros(3,1))
zeros 的作用 ?
在这个问题中,zeros(3,1) 是用来设置线性规划问题的变量的下界为零的约束条件。
在 MATLAB 的 linprog 函数中,第五个参数是用来指定变量的下界约束条件的。在这个例子中,我们希望所有的变量都不能小于零,所以我们使用 zeros(3,1) 来创建一个全部元素为零的列向量作为下界约束条件。
这样设置下界约束条件后,线性规划求解器就会确保求解结果中的所有变量都大于等于零,符合我们的约束要求。
简而言之,zeros(3,1) 的作用是设置变量的下界为零,以满足线性规划问题的约束条件。
【C语言入门学习】函数01
【C语言入门学习】函数的概念01
#前言
数学中我们常见到函数的概念,函数是数学学习的核心思想,而计算机语言中的函数是编程的核心思想。
一、函数的定义:
维基百科中对函数的定义:子程序
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
二、函数的分类
库函数
自定义函数
为什么会有库函数?
c语言的基础库中提供了一系列函数库,便于我们对一些经常使用的函数进行调用,避免重复造轮子
如何查找库函数?
以下为常用的网站:
cplusplus.com
cppreference.com
其中 cppreference 在edge上支持插件,在URL搜索框输入"cc"+"空格"即可实现快速查询函数的定义、使用方式、对应的封装库
常见的 ...