嵌入式学习--step5 实战篇--跑马灯实验
2016-07-30 17:22
267 查看
开始为期一个月的嵌入式学习之路,将会参考某嵌入式开发板资料,使用的是STMF4系列开发,以MDK为编程软件,不做广告,因而不提及具体厂商,以下的内容均为学习笔记。
实战———————————–跑马灯实验
在前面的学习中,有很多原理性的东西,我们先跳过了,比如时钟呀,system文件夹里面的函数呀等,这些知识繁杂,在这里我们试试直接上手,弄点东西吧。
#——————————————————–
开写,工程组下所含的文件
1、组FWLib下面存放的是ST官方提供的固件库函数,每一个源文件stm32f4xx_ppp.c 都对应一个头文件stm32f4xx_ppp.h . 分组内的文件我们可以根据工程需要添加和删除。
2、组CORE下面存放的是固件库必须的核心文件和启动文件,startup_stm32f40_41xxx.s
3、组system是开发板所提供的,含delay、usart、sys.
4、组HARDWRE 下面存放的是每个实验的外设驱动代码,它的实现是通过调用FWlib下面的固件库文件实现的,比如led.c 里面调用stm32f4xx_gpio.c 内定义的函数对led进行初始化。
5、组USER 下面存放的主要是用户代码。
#—————————
STM32F4每组通用I/O有10个32位寄存器控制
STM32F4每组通用I/O端口包括4个32位配置寄存器(MODER、OTYPER、OSPEEDER、PUPDR)、2个32位数据寄存器(IDR和ODR)、1个32位置位/复位寄存器(BSSR)、1
4000
个32位锁定寄存器(LCKR)和2个32位复用功能选择寄存器(AFRH、AFRL)
该代码里面就包含了一个函数void LED_Init(void) ,该函数的功能就是用来实现配置 PF9和PF10为推挽输出;
在配置STM32外设的时候,任何时候都要先使能该外设的时钟,
GPIO是挂载在AHB1总线上的外设,在固件库中对挂载在AHB1总线上的外设时钟使能是通过函数 RCC_AHB1PeriphClockCmd()来实现的
如:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); //使能GPIOF时钟
在这里使用库函数某个IO口的1个位:
GPIO_SetBits(GPIOF,GPIO_Pin_9);
//设置GPIOF.9 输出1
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
//设置GPIOF.9 输出0
void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能GPIOF时钟 //GPIOF9,F10初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //LED0和LED1对应IO口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化GPIO GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10); //GPIOF9,F10设置高,灯灭 }
1、库函数–核心代码部分:
int main(void) { delay_init(168); //初始化延时函数 LED_Init(); //初始化LED端口 /**下面是通过直接操作库函数的方式实现IO控制**/ while(1) { GPIO_ResetBits(GPIOF,GPIO_Pin_9); //LED0对应引脚GPIOF.9拉低,亮 等同LED0=0; GPIO_SetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉高,灭 等同LED1=1; delay_ms(500); //延时300ms GPIO_SetBits(GPIOF,GPIO_Pin_9); //LED0对应引脚GPIOF.0拉高,灭 等同LED0=1; GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉低,亮 等同LED1=0; delay_ms(500); //延时300ms } }
2、位带操作-核心代码部分:
int main(void) { delay_init(168); //初始化延时函数 LED_Init(); //初始化LED端口 while(1) { LED0=0; //LED0亮 LED1=1; //LED1灭 delay_ms(500); LED0=1; //LED0灭 LED1=0; //LED1亮 delay_ms(500); } }
3、直接操作寄存器-核心代码部分:
int main(void) { delay_init(168); //初始化延时函数 LED_Init(); //初始化LED端口 while(1) { GPIOF->BSRRH=GPIO_Pin_9; //LED0亮 GPIOF->BSRRL=GPIO_Pin_10; //LED1灭 delay_ms(500); GPIOF->BSRRL=GPIO_Pin_9; //LED0灭 GPIOF->BSRRH=GPIO_Pin_10; //LED1亮 delay_ms(500); } }
led.h
#ifndef __LED_H #define __LED_H #include "sys.h" //LED端口定义 #define LED0 PFout(9) // DS0 #define LED1 PFout(10) // DS1 void LED_Init(void); //初始化 #endif
**总结一下就是:在我们拿到模板函数库时,如何将其修改成我们需要的功能呢
1 、先建立HAREWARE文件夹,新建led.c 写下关于如何调用FWlib库文件里的驱动来实现相应的功能。
2、 写下 led.h 头文件,写一些简单的,利于程序员阅读的宏定义;及声明led.c 要用的函数。
3、 书写main.c, 里面含要怎么去实现这个led闪烁,可以调用delay、usart、led.c 文件。**
下载时注意是:DTR的低电平复位,RTS高电平进BootLoader
/[b]*************************[/b]/
小知识:关于static位于全局变量前还是局部变量前,抑或是函数前都有不同的作用。具体请参考:http://blog.csdn.net/keyeagle/article/details/6708077
如果是static加在了函数之前,那么就是,私有函数只有该类的成员变量或成员函数可以访问。在C语言中,也有“private函数”,它就是接下来要说的static函数,完成面向对象编程中private函数的功能。
当你的程序中有很多个源文件的时候,你肯定会让某个源文件只提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写,这些其他的函数你可能并不希望被外界(非本源文件)所看到,这时候就可以用static修饰这些“其他的函数”。
所以static函数的作用域是本源文件,把它想象为面向对象中的private函数就可以了。
/[b]****[/b]/
例如:static void SystemClock_Config(void) 这个函数只能在本源文件内使用了。
相关文章推荐
- 嵌入式学习资料——成都国嵌实验手册完整版以及实验源码和韦东山大哥视频教程等
- ARM嵌入式学习--OK6410裸板程序--2.GPIO控制LED跑马灯(从ARM汇编跳转到C语言)
- cortex_m3_stm32嵌入式学习笔记(二十):IIC实验(I2C串行总线)
- 恶意代码分析实战(7-01实验学习笔记)
- cortex_m3_stm32嵌入式学习笔记(二十四):内存管理实验(动态内存)
- Step by step——步步为营,学习嵌入式wince驱动
- 嵌入式学习--step4 STM32F4总线架构
- cortex_m3_stm32嵌入式学习笔记(十八):DAC实验(数模转换)
- cortex_m3_stm32嵌入式学习笔记(十六):ADC实验(模数转换)
- mxnet深度学习实战:跑自己的数据实验和一些问题总结
- 零基础学习嵌入式入门以及项目实战开发【手把手教+国内独家+原创】
- cortex_m3_stm32嵌入式学习笔记(三):串口实验(串口通信)
- cortex_m3_stm32嵌入式学习笔记(二):独立按键实验(IO输入)
- cortex_m3_stm32嵌入式学习笔记(十九):DMA实验(高速传输)
- cortex_m3_stm32嵌入式学习笔记(九):PWM 输出实验(定时器的PWM输出)
- arm处理器裸机开发实战学习笔记1------流水灯实验错误纠正
- cortex_m3_stm32嵌入式学习笔记(一):建立工程模板+跑马灯实验(IO输出)
- cortex_m3_stm32嵌入式学习笔记(六):窗口看门狗实验(WWDG)
- cortex_m3_stm32嵌入式学习笔记(二十二):触摸屏实验(触摸屏驱动)
- 嵌入式学习--step1 新建模板