目录


目的与要求:

方法、步骤:

1.STM32 硬件的准备与连接

2.STM32 代码下载与调试


内容:

1.STM32 硬件的准备与连接(见图1)

2.STM32 代码下载与调试


结论: 定时器的工作原理:

掌握定时器库函数的使用:初始化TIM3

完成定时器程序编写:TIM3中断处理函数

掌握 定时器程序调试以及寄存器查看 :


目的与要求:

1.理解定时器的工作原理。

2.掌握定时器库函数的使用。

3.完成定时器程序编写。

4.掌握定时器程序调试以及寄存器查看。


方法、步骤:

1.STM32 硬件的准备与连接

  1. 准备好 Plus 节点板。
  2. 将J-Link 仿真器与Plus 节点的STM32 调试口相连接,仿真器USB 端与电脑相连接。
  3. 将 12V 电源与 Plus 节点的电源接口相连接,连接后接通电源。
  4. 通过 RJ-45 线将 Plus 节点与传感器板相连,需要用到的传感器板在实验环境查看。(以采集类 传感器板为例)。

2.STM32 代码下载与调试

  1. 打开实验代码中 06-Timer\Project 目录下的 TIMER.eww 工程。 
  2. 使用IAR开发环境打开电子时钟实验程序并阅读readme文件。
  3. 编译代码。                                          
  4. 将程序通过 J-Link 调试工具下载到 Plus 节点中,IAR 进入调试页面。
  5. 点击 IAR 的执行按钮(GO)执行程序,从 Plus 节点上查看实验现象:D3、D4灯一秒转换一次状态,且两灯的状态保持相反。                               
  6. 通过Watch窗口查看LED控制标志位led_status参数。在下图所示处打上断点,运行程序,经过1S后程序执行到断点处,观察到led_status状态由无变成’\0’(0x00)空值。
  7. 通过Register窗口查看TIM3的计数寄存器计数值。运行程序,执行到断点处,查到看TIM3_CNT数值变化:第一次执行CR1、SR、CNT、DMAR由0值分别变为0x0001、0x001E、0x02AF、0x0001。继续重复执行,CNT变为0x0FFA、0x0D08、0x0781、0x0D7C。






内容:

1.STM32 硬件的准备与连接(见图1)

  1. 准备好 Plus 节点板。
  2. 将J-Link 仿真器与Plus 节点的STM32 调试口相连接,仿真器USB 端与电脑相连接。
  3. 将 12V 电源与 Plus 节点的电源接口相连接,连接后接通电源。
  4. 通过 RJ-45 线将 Plus 节点与传感器板相连,需要用到的传感器板在实验环境查看。(以采集类 传感器板为例)。


2.STM32 代码下载与调试

  • 打开实验代码中 06-Timer\Project 目录下的 TIMER.eww 工程。

ESP32读取光敏传感器数据 esp32传感器实验_ESP32读取光敏传感器数据



  • 使用IAR开发环境打开电子时钟实验程序并阅读readme文件。

ESP32读取光敏传感器数据 esp32传感器实验_ESP32读取光敏传感器数据_02


 

  • 编译代码。

ESP32读取光敏传感器数据 esp32传感器实验_初始化_03


  • 将程序通过 J-Link 调试工具下载到 Plus 节点中,IAR 进入调试页面。

ESP32读取光敏传感器数据 esp32传感器实验_ESP32读取光敏传感器数据_04

  • 点击 IAR 的执行按钮(GO)执行程序,从 Plus 节点上查看实验现象:D3、D4灯一秒转换一次状态,且两灯的状态保持相反。

ESP32读取光敏传感器数据 esp32传感器实验_ESP32读取光敏传感器数据_05

ESP32读取光敏传感器数据 esp32传感器实验_定时器_06


  

ESP32读取光敏传感器数据 esp32传感器实验_ESP32读取光敏传感器数据_07

 

  • 通过Watch窗口查看LED控制标志位led_status参数。在下图所示处打上断点,运行程序,经过1S后程序执行到断点处,观察到led_status状态由无变成’\0’(0x00)空值。 

ESP32读取光敏传感器数据 esp32传感器实验_stm32_08

 

ESP32读取光敏传感器数据 esp32传感器实验_寄存器_09


  • 通过Register窗口查看TIM3的计数寄存器计数值。运行程序,执行到断点处,查到看TIM3_CNT数值变化:第一次执行CR1、SR、CNT、DMAR由0值分别变为0x0001、0x001E、0x02AF、0x0001。继续重复执行,CNT变为0x0FFA、0x0D08、0x0781、0x0D7C。

ESP32读取光敏传感器数据 esp32传感器实验_寄存器_10

ESP32读取光敏传感器数据 esp32传感器实验_初始化_11

ESP32读取光敏传感器数据 esp32传感器实验_ESP32读取光敏传感器数据_12

ESP32读取光敏传感器数据 esp32传感器实验_ESP32读取光敏传感器数据_13

ESP32读取光敏传感器数据 esp32传感器实验_stm32_14

ESP32读取光敏传感器数据 esp32传感器实验_初始化_15

 


结论:
定时器的工作原理:

        计数器的哪种功能,其最基本的工作原理是进行计数。定时/计数器的核心是一个计数器,可以进行加1(或减1)计数,每出现一个计数信号,计数器就自动加1(或自动减1),当计数值从最大值变成0(或从0变成最大值)溢出时定时/计数器便向CPU提出中断请求,计数信号的来源可选择周期性的内部时钟信号(如定时功能)或非周期性的外界输入信号(如计数功能)。


掌握定时器库函数的使用:初始化TIM3

void timer3_init(unsigned intperiod, unsigned short prescaler) //TIM_Period为16位的数
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; //定时器配置
NVIC_InitTypeDefNVIC_InitStructure; //中断配置
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel= TIM3_IRQn; //TIM3中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority= 1; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE; //使能中断
NVIC_Init(&NVIC_InitStructure);//按照上述配置初始化中断
TIM_TimeBaseStructure.TIM_Period= period; //计数器重装值
TIM_TimeBaseStructure.TIM_Prescaler= prescaler; //预分频值
TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1; //时钟分割
TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
//按上述配置初始化TIM3
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
//允许定时器3更新中断
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}


完成定时器程序编写:TIM3中断处理函数

void TIM3_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { //如果中断标志被设置
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除中断标志
        led_status= ~led_status; //LED灯状态标志位翻转
    }
}


掌握 定时器程序调试以及寄存器查看 :

  1. Plus 节点上实验现象:D3、D4灯一秒转换一次状态,且两灯的状态保持相反。
  2. led_status状态由无变成’\0’(0x00)空值。
  3. TIM3_CNT数值变化:第一次执行CR1、SR、CNT、DMAR由0值分别变为0x0001、0x001E、0x02AF、0x0001。继续重复执行,CNT变为0x0FFA、0x0D08、0x0781、0x0D7C。