以下为《实验七 基本定时器输出实验》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
实验七: TIM实验-定时输出实验
实验目的:
熟悉STM32开发平台的软硬件,学会使用STM32的固件库,能够编程实现项目功能。
实验内容:
配置GPIO端口,能够设置PWM输出对应管脚的端口模式
实现TIM定时控制LED进行周期的闪烁
实验过程
1、TIM简介
定时器是MCU中常用的外设,用于实现计数、定时等功能。常用于脉冲计数、时间控制和波形控制等场合。
STM32F103有8个通用功能的定时器(还有几个专用的,例如看门狗、RTC,将在相关章节讲解),分别是TIM1-TIM8,它们分为三组:高级控制定时器、通用定时器和基本定时器。
TIMx由一个16位的自动装载的计数器组成,受一个可配置的预分频器驱动。主要特性如下:
基本计数,定时功能,计数范围1-65535。
每个定时器有四个独立通道,TIM1还有三个通道可产生互补信号。
适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形。
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。
定时器之间完全独立的,它们不共享任何资源,可以同步操作。
PWM(Pulse Width Modulation,脉冲宽度调制)是一种对模拟信号电平进行数字编码的方法,它利用脉冲宽度即占空比来表示一个模拟信号电平的高低,是一种数字信号对模拟电路进行控制的非常有效的技术。
在STM32F103中,TIMx模块可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCR(捕获/比较)寄存器确定占空比的PWM信号。
2、GPIO端口配置
由于开发板上标准配置具备LED控制的功能和硬件接口,所以要做本章的实验可以采用开发板实现。
图1-1 LED连某某示意图
根据学过的GPIO配置的知识,对于LED端口配置可配置成复用推挽输出模式,配置代码内容如下所示:
void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启LED相关的GPIO外设时钟*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
/*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为50MHz */
GPIO_InitStructure.GPIO_Speed = 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 _CounterMode_Up;
// 重复计数器的值,基本定时器没有,不用管
//TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// 初始化定时器
TIM_TimeBaseInit(BASIC_TIM, &TIM_TimeBaseStructure);
// 清除计数器中断标志位
TIM_ClearFlag(BASIC_TIM, TIM_FLAG_Update);
// 开启计数器中断
TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE);
// 使能计数器
TIM_Cmd(BASIC_TIM, ENABLE);
}
4、定时器中断服务函数部分
中断函数主要是调用库函数中对于定时器中断服务子程序进行编写,此部分代码如下所示:
void BASIC_TIM_IRQHandler(void)
{
if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET )
{
time++;
TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update);
}
}
7、主程序部分
主程序部分主要是调用各个外设端口部分的初始化程序,主循环中调用控制子函数,主程序部分代码如下所示:
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
BASIC_TIM_NVIC_Config();
BASIC_TIM_Config();
while(1)
{
if( time == 500 )
{
time = 0;
ledr_toggle();
}
}
}
void ledr_toggle(void)
{
if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 0) // LEDR is on
{
GPIO_SetBits(GPIOB, GPIO_Pin_5); // LEDR OFF
}
else // LEDR is off
{
GPIO_ResetBits(GPIOB, GPIO_Pin_5); // LEDR ON
}
}
实验现象
1.编译整个程序,编译完成后观察Build Output输出的信息,若显示 0 Error(s),0 Warnig(s),则证明程序编译无问题,继续下一步下载操作。
2.连某某J-Link至开发板,将USB插入电脑,下载程序至开发板,观察实验现象,LED以500ms的周期进行亮灭闪烁。
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《实验七 基本定时器输出实验》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。