1、中断方案
三个定时器的中断服务程序各自负责一个LED
2、main方案
依据八进制真值表进行三个LED灯的亮灭切换
ppt教程:
1、了解STM32最小系统板的软硬件组成。
2、考察C代码阅读能力、掌握C函数编写。
3、掌握嵌入式开发的单步跟踪调试、实时变量查看。
4、掌握开关LED的GPIO编程实现。
5、掌握基于空指令延时的LED跑马灯编程实现。
1、阅读STM32系统板原理图,找到最小系统板的几个组成部分,以及LED、KEY和UART扩展电路。
2、安装Keil ARM开发软件,根据《问题汇总》解决遇到问题,注意SWD仿真器的选择、STM32 Flash的配置。
3、针对示例代码,进行源码编译、程序下载、断点设置、单步调试、全速运行,注意区分compile&build、load&debug。
(思考题:AddWatch可以查看变量值,但如何通过内存地址查看变量值呢?)
4、编写程序,实现LedInit、SetLedOn、SetLedOff函数,注意单片机Main主函数的初始化部分和主体功能循环部分。
5、编写程序,实现MyDelay延时函数。
6、编写程序,实现LED跑马灯,或八进制灯(可选)。
7、提高:阅读STM32原理图,找到特殊的LED4和KEY4,借助杜邦线连接LED4和STM32芯片的某个GPIO管脚,并在Keil环境编程,实现对LED4的亮灭控制。
GPIO-流水灯-使用库函数stm32单片机源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @date 2018-xx-xx
- * @brief 测试led
- ******************************************************************************
- * @attention
- *
- ******************************************************************************
- */
-
- #include "stm32f10x.h"
- #include "bsp_led.h"
- void Delay(__IO u32 nCount);
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
- int main(void)
- {
- /* LED 端口初始化 */
- LED_GPIO_Config();
-
- /* 方法2,使用固件库控制IO */
- while (1)
- {
- LED1( ON ); // 亮
- Delay(0x0FFFFF);
- LED1( OFF ); // 灭
- LED2( ON ); // 亮
- Delay(0x0FFFFF);
- LED2( OFF ); // 灭
- LED3( ON ); // 亮
- Delay(0x0FFFFF);
- LED3( OFF ); // 灭
- }
- }
- void Delay(__IO uint32_t nCount) //简单的延时函数
- {
- for(; nCount != 0; nCount--);
- }
- /*********************************************END OF FILE**********************/
复制代码
GPIO-流水灯-直接操作寄存器:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @date 2013-xx-xx
- * @brief 测试led
- ******************************************************************************
- * @attention
- ******************************************************************************
- */
- #include "stm32f10x.h"
- #include "bsp_led.h"
- void Delay(__IO u32 nCount);
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
- int main(void)
- {
- /* LED 端口初始化 */
- LED_GPIO_Config();
- /* 方法1,直接控制寄存器 */
- while(1)
- {
- // ODR GPIOB
- // 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (复位值)
- // 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
- GPIOB->ODR = 0XFFFE; //低电平,GPIOB0(LED0)灯亮
- Delay(0x0FFFFF);
- GPIOB->ODR = 0XFFFF; //高电平,GPIOB0(LED0)灯灭
- // ODR GPIOC
- // 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (复位值)
- // 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
- GPIOC->ODR = 0XFFEF; //低电平,GPIOC4(LED1)灯亮
- Delay(0x0FFFFF);
-
- GPIOC->ODR = 0XFFFF; //高电平,GPIOC4(LED1)灯亮
- // ODR GPIOC
- // 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (复位值)
- // 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
- GPIOC->ODR = 0XFFf7; //低电平,GPIOC5(LED2)灯亮
- Delay(0x0FFFFF);
- GPIOC->ODR = 0XFFFF; //高电平,GPIOC5(LED2)灯亮
- }
- }
- void Delay(__IO uint32_t nCount) //简单的延时函数
- {
- for(; nCount != 0; nCount--);
- }
- /*********************************************END OF FILE**********************/
复制代码
GPIO-流水灯-自定义宏操作
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @date 2013-xx-xx
- * @brief 测试led
- #include "stm32f10x.h"
- #include "bsp_led.h"
- void Delay(__IO u32 nCount);
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
- int main(void)
- {
- /* LED 端口初始化 */
- LED_GPIO_Config();
-
- /* 方法3,使用寄存器控制IO */
- while(1)
- {
- LED1_TOGGLE; //led1状态反转,亮
- Delay(0x0FFFFF);
- LED1_TOGGLE; //led1状态反转,灭
- LED2_TOGGLE; //led2状态反转,亮
- Delay(0x0FFFFF);
- LED2_TOGGLE; //led2状态反转,灭
- LED3_TOGGLE; //led3状态反转,亮
- Delay(0x0FFFFF);
- LED3_TOGGLE; //led3状态反转,灭
- }
- }
- void Delay(__IO uint32_t nCount) //简单的延时函数
- {
- for(; nCount != 0; nCount--);
- }
- /*********************************************END OF FILE**********************/
复制代码
所有资料51hei提供下载:
LED八进制灯(系统板、原理图、GPIO、空指令延时).zip
(1.88 MB, 下载次数: 30)
|