嵌入式lab3——自行车码表

来源:互联网 发布:gg是什么意思网络语言 编辑:程序博客网 时间:2024/04/28 02:38

实验三——自行车码表

日期:2016-4-15

一、实验目的

1.        理解MCU上电启动过程;

2.        掌握使用Cube库来编写STM32裸机程序的方法;

3.        掌握使用Cube库来编写GPIO和UART程序的方法;

4.        掌握使用Cube库来编写中断响应程序的方法;

5.        理解前后台程序模式;

6.        掌握在STM32F103上编写裸机程序并下载运行的方法

二、实验器材

硬件

Ÿ   STM32F103核心板板一块;

Ÿ   microUSB线一根(供电;

Ÿ   STLink板或USB串口板一块。交叉编译软件;

软件

Ÿ   交叉编译软件

三、实验步骤

在stm32f1xx_hal_conf.h中解除宏定义:

  1. 编写Cube程序,配置UART0为9600,8n1,上电后向串口输出“Hello”,在PC上通过串口软件观察结果;

首先进入STM32CubeMX。按照实验中的要求,在右侧芯片设置中,将PA12、PA11定为输入(接按钮),PA10、PA9分别定为TX、RX(接电脑串口)。







  1. 通过面包板在PA11和PA12各连接一个按钮开关到地;


  1. 编写Cube程序,配置PA11和PA12为内部上拉到输入模式,在main()函数循环检测PA11按钮按下,并在按钮按下时 在串口输出“Pressed”;

main.c:



  1. 编写Cube程序,配置PA12下降沿触发中断,程序中设置两个全局变量,一个为计数器,一个为标识。当中断触发 时,计数器加1,并设置标识。在主循环中判断标识,如果标识置位则清除标识并通过串口输出计数值;

stm32f1xx_it.c:


这里面我们要调用HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);这个函数主要工作就是判断中断标志位, 调用中断回调函数HAL_GPIO_EXTI_Callback.

main.c:




基本上功能正常,但是有出现count隔着跳的情况,应该是因为没有设置按钮去抖动。

  1. 编写Cube程序,开启定时器为200ms中断一次,中断触发时设置标识,主循环根据这个标识来做串口输出(取消4 的串口输出);

Stm32f1xx_it.c:


main:


把printresult()函数从原来的地方移到TIM_PeroidElapsedCallback中,并且把printResult()中的delay语句删掉,没删之前定时器运作不起来。


  1. 编写完整的码表程序,PA12的按钮表示车轮转了一圈,通过计数器可以得到里程,通过定时器中断得到的时间可以 计算出速度;PA11的按钮切换模式,模式一在串口输出里程,模式二在串口输出速度。

main.c:







四、实验感想

这一次实验配环境花了很久,看了各种教程花了两天才弄好,码代码的时候前面的比较顺利,但是卡在定时器那一题很久,弄了一下午定时器始终没有运行起来,后来把printResult函数里的delay删掉就好了,推测是中断处理函数调用了printResult(),在执行的时候会屏蔽所有的中断,而delay需要定时器中断来解除delay状态,因此程序在这个地方会卡死,一边在等定时器中断,另一边却把中断屏蔽了。总之实验一路坎坷真的出现过各种各样的错误,不过最后全部做完了还是蛮开心的。












0 0