资讯详情

第5、6、7章-数字IO、定时计数器组件、模拟IO

文章目录

  • 第五章-数字输入输出系统设计
    • 1、GPIO的基本特性
    • 2、GPIO工作模式
    • 3、GPIO中断类型和用途
    • 4、GPIO配置寄存器和工作模式编程【※】
    • 5、GPIO编程输入数据寄存器和输出数据寄存器【※】
    • 6.知道为什么变逻辑电平,有哪些方法?
    • 7.应用简单的人机交互接口
    • 8、STM32F10x的GPIO操作实例【※】
  • 第六章定时计数器组件
    • 1.通用定时器更新比较定时,计算定时、预分频值、重装载值,编程实现。
    • 2、独立看门狗定时器的作用,计算看狗门定时溢出时间。选择溢出时间的一般原则。
    • 3、知晓RTC及其功能。
    • 4、掌握输出PWM编程应用的波形方法和边缘对齐(向上计数)
  • 第七章-模拟输入输出系统设计
    • 1.掌握模拟输入输出系统的组成(图)
    • 2.了解传感器的类型,并根据实际应用选择相应的传感器
    • 3.了解信号调节的主要功能任务
    • 4.设计一级低通波器RC计算
    • 5、掌握片上ADC的编程应用
    • 6.掌握标准变化及其应用
    • 7、掌握片上DAC的编程应用

第五章-数字输入输出系统设计

1、GPIO的基本特性

输入缓冲,输出

2、GPIO工作模式

GPIO的I/O 管脚上 I/O 该类型可由软件独立配置为不同的工作模式。主要工作模式包括: (1)高阻(浮空) 输入模式 GPIO输入模式决定GPIO由输入缓冲功能组成GPIO端口内三态门控制。由于读取三态门控制输入状态,读取无效时呈高阻状态,又称高阻输入模式。 在这里插入图片描述

(2)泄漏输出模式(可改变电频逻辑) GPIO泄漏输出模式是基于普通输出模式MOS管道漏极开路的输出方式。

(3)推拉输出模式(1逻辑电流大,能带动发光二极管) GPIO推拉输出模式。GPIO推拉输出是指输出端口推拉

(4)准双向I/O模式 GPIO的准双向I/O模式。GPIO的准双向I/O模式是在需要输入时阅读外部数据(输入),并在需要输出时将数据发送到端口。

(5)端口上下拉 GPIO引脚内部可配置配置为上拉或下拉。如果内部没有配置,则可以连接拉电阻或下拉电阻。上拉是指引脚和电源VDD或VCC间接一个大小1000K左右电阻,下拉是指引脚和负电源VSS或地GND之间接一个100K左右电阻。

GPIO引脚

3、GPIO中断类型和用途

4、GPIO配置寄存器和工作模式编程【※】

(汇编、寄存器和固件库) 汇编:

寄存器:

固件库:

5、GPIO编程输入数据寄存器和输出数据寄存器【※】

(汇编、寄存器和固件库) 汇编: 寄存器:

固件库方式

6.知道为什么变逻辑电平,有哪些方法?

转换逻辑电平 几种方法: (1)同相逻辑电平转换接口。

(2)用构成的逻辑电平转换接口。

(3)仅用逻辑电平转换接口。

(4)用芯片逻辑电平转换。

(5)采用转换。

7.应用简单的人机交互接口

发光管: 以上判断按钮采用寄存器方式,也可根据以下函数判断: 按键:

8、STM32F10x的GPIO操作实例【※】

汇编语言: 寄存器:

固件库:

第六章定时计数器组件

1.通用定时器更新比较定时,计算定时、预分频值、重装载值,编程实现。

比较定时: 比较功能。比较(匹配)输出功能简称比较(匹配),是指当定时器计值等于预设的比较(匹配)寄存器值时,会产生比较(匹配)信号或标志,刺激比较(匹配)输出的信号类型。

确定时参数:

#define N 10 TIM3->ARR=10*N-1;       /*定时 N ms,N初始值可以自行更换*/ TIM3->PSC= SystemCoreClock/10000-1 ;     /* 预分频系数*/; 

当SystemCoreClock=F时,有ARR=10000*T-1,

当T=N ms时,有ARR=10000N/1000-1=10N-1

操作固件库函数如下:

TIM_TimeBaseStructure.TIM_Period =10*N-1; /*重装计数值N ms */ TIM_TimeBaseStructure.TM_Prescaler = SystemCoreClock/10000-1 ; 

在比较中断定时方式下,设置预分频寄存器和比较寄存器值确定定时时间

TIM3->ARR=65535;		/*重装值FFFF*/
TIM3->CCR=10*N;	/*定时 N ms,N可自行更换初始值*/
TIM3->PSC= SystemCoreClock/10000-1 ; /* 预分频系数*/;

SystemCoreClock=F CCR=10000T=10*1000T,

当T=1秒时,CCR=101000 T=10ms=0.01S时,CCR=1010 T=N ms时,CCR=10*N

NVIC设置 中断服务

主函数: 长定时: NVIC初始化: 中断服务:

2、独立看门狗定时器的作用,计算看狗门定时溢出时间。选择溢出时间的一般原则。

作用: 在嵌入式应用中,微控制器必须可靠工作。但系统由于种种原因(包括环境干扰等),程序运行有时会不按指定指令执行,导致死机,系统无法继续工作下去,这时必须使系统复位才能使程序重新投入运行。这个能使系统定时复位的硬件称为看门狗定时器WDT,简称看门狗或WDT。

独立看狗门定时溢出时间:

3、知晓RTC及其功能。

RTC(Real Time Clock)组件是一种能直接或间接提供日历/时钟、数据存储等功能的专用定时组件,现代嵌入式微控制器片内大都集成了实时时钟(RTC)单元。 RTC具有的包括**BCD数据有秒、分、时、日、月、年、闰年产生器、告警功能(告警中断或从断电模式唤醒)**等。

4、掌握输出PWM波形的方法及边沿对齐(向上计数)编程应用

(周期或频率的改变方法,占空比改变方法) 脉冲宽度调制(Pulse Width Modulation, PWM)是对进行的一种处理方法。 编程: 初始化GPIO

void PWM_GPIO_Init(void)
{ 
        
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);//使能A端口和多功能IO时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PA6引脚TIM4对应的CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用输出推挽
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度为50M
	GPIO_Init(GPIOA, &GPIO_InitStructure);//将端口GPIOD进行初始化配置
}

初始化TIM3

void Init_TIMER(void)
{ 
        	TIM_TimeBaseInitTypeDef  TIM_BaseInitStructure;	//定义一个定时器结构体变量
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  //使能定时器4,重要!!
	TIM_DeInit(TIM3);                              	//将TIM3定时器初始化位复位值
	TIM_InternalClockConfig(TIM3); 	//配置 TIM3 内部时钟
	TIM_BaseInitStructure.TIM_Period = 7200-1;//0.1ms 10KHz 
	TIM_BaseInitStructure.TIM_Prescaler =0;
	TIM_BaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割为0
	TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure
 	TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在 ARR 上的预装载寄存器 
	TIM_Cmd(TIM3, ENABLE); 		          //使能TIM3
}

初始化PWM

void Init_PWM(uint16_t Dutyfactor)
{ 
        	TIM_OCInitTypeDef  TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);//设置缺省值
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM 模式 1 输出 
	TIM_OCInitStructure.TIM_Pulse = Dutyfactor; //设置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100%
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM 输出比较极性高 
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //使能输出
	TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根据参数初始化PWM寄存器 通道1(PA6) 
	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能 TIMx在 CCR1 上的预装载寄存器
	TIM_CtrlPWMOutputs(TIM3,ENABLE);  //设置TIM3 的PWM 输出为使能 
}

第7章-模拟输入输出系统设计

1、掌握模拟输入输出系统的组成(图)

2、了解传感器的种类,会根据实际应用选择相应传感器

按输入量可将传感器分为:位移传感器、速度传感器、温度传感器、压力传感器等; 按工作原理分类:应变式、电容式、电感式、压电式、热电式等; 按物理现象分类:结构型传感器、特性型传感器; 按能量关系分类:能量转换型传感器、能量控制传感器; 按输出信号分类:模拟式传感器、数字式传感器

3、知晓信号调理的主要功能任务

主要功能和任务为:放大与衰减、隔离、多路复用、滤波、激励与变换、冷端补偿。

4、一阶低通波器设计及RC计算

是指滤除一定频率范围一定幅度的无用信号。

5、掌握片上ADC的编程应用

配置ADC引脚: ADC单通道初始化

在这里插入代码片/* 初始化ADC:独立模式、多通道扫描禁止、连续转换禁止、软件触发、ADC数据右对齐 */		
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /*独立工作模式*/
ADC_InitStructure.ADC_ScanConvMode = DISABLE;	/*禁止多通道扫描*/
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;/*连续转换模式禁止*/
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不用外部触发,用软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /*ADC数据右对齐*/
ADC_InitStructure.ADC_NbrOfChannel = 1; /*进行规则转换的ADC通道数为1个通道*/
ADC_Init(ADC1, &ADC_InitStructure);
 ADC_Cmd(ADC1, ENABLE);	         /*使能ADC1*/
ADC_ResetCalibration(ADC1);	         /*使能ADC1复位校准寄存器*/
while(ADC_GetResetCalibrationStatus(ADC1)); /*等待复位校准寄存器接收*/
ADC_StartCalibration(ADC1);	 /*启动ADC1校准*/
while(ADC_GetCalibrationStatus(ADC1));    /*等待ADC1校准结束*/
ADC_SoftwareStartConvCmd(ADC1, ENABLE); /*启动软件转换*/

单通道ADC获取变换值 ADC多通道方式初始化DMA

 u16 ADC_ConvertedValue[20][3];  /*ADC转换结果存放变量(地址)3个通道,每个通道采样20次*/
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA1时钟
 DMA_DeInit(DMA1_Channel1);  //指定DMA通道DMA1恢复初始设置
 DMA_InitStructure.DMA_PeripheralBaseAddr = ADC_DR_Address;//设置DMA外设地址ADC_DR_Adress
 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;//设置DMA内存地址
 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //外设设置为数据传输的来源
 DMA_InitStructure.DMA_BufferSize = 20*3	//DMA缓冲区大小设置 ,3个通道每通道采样20次 
 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//DMA不允许地址递增
 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址递增 
 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//12位ADC用16位
 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//循环缓存模式
 DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA高优先级
 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//禁止存储器到存储器传输
 DMA_Init(DMA1_Channel1, &DMA_InitStructure);
 DMA_Cmd(DMA1_Channel1, ENABLE);  //使能DMA通道

ADC多通道方式初始化ADC

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);	//使能ADC1时钟
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //使用独立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE;	 //扫描模式允许,多通道必须使能
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连接转换模式,无需外接触发器
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不用外部触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //使用数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 3;  // 3个通道转换通道
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_55Cycles5); //通道3采样周期55.5
ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 2, ADC_SampleTime_55Cycles5); //通道6采样周期55.5
ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 3, ADC_SampleTime_55Cycles5); //通道7采样周期55.5
ADC_DMACmd(ADC1, ENABLE); /*使能ADC的DMA*/  ADC_Cmd(ADC1, ENABLE); //使能ADC1
ADC_StartCalibration(ADC1);/*校准*/ while(ADC_GetCalibrationStatus(ADC1));//等待校准结束
ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //开始转换


多通道DMA方式获取变换值

6、掌握标度变换及其应用

标度变换:指将对应参数值的大小转换成能直接显示有量纲的被测工程量数值,也称为工程转换。 对于ADC而言,标度变换的目的就是要将ADC转换得到的数字量如何变换成工程量(实际物理量)。 (1)线性标度变换 Yx=kNx+b (2)非线性标度变换,如流量与差压的关系压力: 流量计算公式: Yx=kNx+b (7.1) k和b为常量,Nx为ADC变换得到的数字量, Yx对应Nx的物理量。 假设:Y0为被测物理量下限;Ym为被测物理量上限; N0为Y0对应的数字量;Nm为Ym对应的数字量;则: Ym=kNm+b Y0=kN0+b 经过求解二元一次方程组得: k=(Ym-Y0)/(Nm-N0),b=Y0-N0(Ym-Y0)/(Nm-N0)代入(7-1)式得: Yx=Y0+(Ym-Y0)*(Nx-N0)/(Nm-N0) (7.2) 其中Y0、Ym、N0、Nm 对于某一具体的参数来说为常数,不同的参数有不同的值。

7、掌握片上DAC的编程应用

标签: 5kn力值传感器10n0电容如何分辨三极管的类型mos环振式数字加速度传感器电感器100k

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台