• 【无线传感器网络】2 STM32编程实验


    目录

     

    目的与要求:

    方法、步骤:

    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 工程。

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


     

    • 编译代码。

     

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

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


     

     


     

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

     

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

     

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

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

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

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

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

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

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

    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。
  • 相关阅读:
    mysql 索引欣失效的情况
    计算机网络1
    Apache nginx解析漏洞复现
    从0开始学习JavaScript--JavaScript 异步编程
    WebLOAD: 一站式性能测试工具
    【Flask基础】六,拦截器/请求钩子(全局+模块+资源选择性放行)
    C++指针和地址偏移在HotSpot VM中的应用
    python中dir()和help()的作用
    剑指 Offer 47. 礼物的最大价值 (百度一面 算法题)
    uniapp h5 部署
  • 原文地址:https://blog.csdn.net/weixin_51695846/article/details/121918197