概述
实验三——自行车码表
日期: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中解除宏定义:
- 编写Cube程序,配置UART0为9600,8n1,上电后向串口输出“Hello”,在PC上通过串口软件观察结果;
首先进入STM32CubeMX。按照实验中的要求,在右侧芯片设置中,将PA12、PA11定为输入(接按钮),PA10、PA9分别定为TX、RX(接电脑串口)。
- 通过面包板在PA11和PA12各连接一个按钮开关到地;
- 编写Cube程序,配置PA11和PA12为内部上拉到输入模式,在main()函数循环检测PA11按钮按下,并在按钮按下时 在串口输出“Pressed”;
main.c:
- 编写Cube程序,配置PA12下降沿触发中断,程序中设置两个全局变量,一个为计数器,一个为标识。当中断触发 时,计数器加1,并设置标识。在主循环中判断标识,如果标识置位则清除标识并通过串口输出计数值;
stm32f1xx_it.c:
这里面我们要调用HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);这个函数主要工作就是判断中断标志位, 调用中断回调函数HAL_GPIO_EXTI_Callback.
main.c:
基本上功能正常,但是有出现count隔着跳的情况,应该是因为没有设置按钮去抖动。
- 编写Cube程序,开启定时器为200ms中断一次,中断触发时设置标识,主循环根据这个标识来做串口输出(取消4 的串口输出);
Stm32f1xx_it.c:
main:
把printresult()函数从原来的地方移到TIM_PeroidElapsedCallback中,并且把printResult()中的delay语句删掉,没删之前定时器运作不起来。
- 编写完整的码表程序,PA12的按钮表示车轮转了一圈,通过计数器可以得到里程,通过定时器中断得到的时间可以 计算出速度;PA11的按钮切换模式,模式一在串口输出里程,模式二在串口输出速度。
main.c:
四、实验感想
这一次实验配环境花了很久,看了各种教程花了两天才弄好,码代码的时候前面的比较顺利,但是卡在定时器那一题很久,弄了一下午定时器始终没有运行起来,后来把printResult函数里的delay删掉就好了,推测是中断处理函数调用了printResult(),在执行的时候会屏蔽所有的中断,而delay需要定时器中断来解除delay状态,因此程序在这个地方会卡死,一边在等定时器中断,另一边却把中断屏蔽了。总之实验一路坎坷真的出现过各种各样的错误,不过最后全部做完了还是蛮开心的。
最后
以上就是洁净酸奶为你收集整理的嵌入式lab3——自行车码表的全部内容,希望文章能够帮你解决嵌入式lab3——自行车码表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复