STM32:STM32学习记录2:跑马灯及仿真
2016-03-12 15:24
435 查看
以下为自己编写的跑马灯程序,其中PA8和PD2连接LED
使用的是官方固件库3.4版本!!!!前提是配置好编译器才可以执行!!
配置流程:
1:系统时钟初始化,包括系统时钟和要开放的IO口或者功能的时钟配置。
2:IO口初始化,包括引脚,速率,输入输出模式等。
注意!!!
1:与51系列不同的是IO口还需要配置时钟,这是STM32省电的一种技巧。
2:IO口需设置为通用IO口,推挽输出。
IO的输出配置可以是推挽模式和开漏模式,具体区别看参考手册108页。
IO口的一般配置流程:
GPIO_InitTypeDef GPIO_InitStructure;//定义
GPIO_InitStructure为 GPIO_InitTypeDef结构体类型
特别注意用库函数的话一定要定义结构体类型!!!!!!!!不仅是GPIO像串口等等的初始化都需要定义结体,
具体类型可以查看官方库
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引脚选择
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
3:关于系统时钟:系统时钟可以是外接晶振的倍频。我用9倍频!在官方库中选择好定义的宏,直接调用函数即可实现RCC的设置,具体频率设定由system_stm32f10xx.c(默认目录在ARM/Startup/ST)文件中得宏定义,开放哪一个宏,当调用SystemInit()库函数时,程序可以把频率设定好。
系统时钟的配置流程:
void RCC_Configuare(void)
{
SystemInit();//频率设定有system_stm32f10x.c文件中的宏定义 开放某个宏 当调用SystemInit()时即可设置好频率
RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能时钟安全系统
}
流水灯的程序没啥说的了,各种文档满天飞。这里重点说明几点:
1:时钟系统,详细看《零死角玩转stm32-初级篇》 66页。
2:仿真:
首先是仿真设置,主要是设置外部晶振频率。
3:逻辑分析仪的使用
点逻辑分析仪----选setup---在Current Logic Analyser Signals中 添加 PORTA 然后选择下面 Display Type 中选bit即可
4:MDK中的空语句写法
__NOP(); 注意前面是两杠 定义在core_cm3.h中
以下为原程序:
使用的是官方固件库3.4版本!!!!前提是配置好编译器才可以执行!!
配置流程:
1:系统时钟初始化,包括系统时钟和要开放的IO口或者功能的时钟配置。
2:IO口初始化,包括引脚,速率,输入输出模式等。
注意!!!
1:与51系列不同的是IO口还需要配置时钟,这是STM32省电的一种技巧。
2:IO口需设置为通用IO口,推挽输出。
IO的输出配置可以是推挽模式和开漏模式,具体区别看参考手册108页。
IO口的一般配置流程:
GPIO_InitTypeDef GPIO_InitStructure;//定义
GPIO_InitStructure为 GPIO_InitTypeDef结构体类型
特别注意用库函数的话一定要定义结构体类型!!!!!!!!不仅是GPIO像串口等等的初始化都需要定义结体,
具体类型可以查看官方库
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引脚选择
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
3:关于系统时钟:系统时钟可以是外接晶振的倍频。我用9倍频!在官方库中选择好定义的宏,直接调用函数即可实现RCC的设置,具体频率设定由system_stm32f10xx.c(默认目录在ARM/Startup/ST)文件中得宏定义,开放哪一个宏,当调用SystemInit()库函数时,程序可以把频率设定好。
系统时钟的配置流程:
void RCC_Configuare(void)
{
SystemInit();//频率设定有system_stm32f10x.c文件中的宏定义 开放某个宏 当调用SystemInit()时即可设置好频率
RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能时钟安全系统
}
流水灯的程序没啥说的了,各种文档满天飞。这里重点说明几点:
1:时钟系统,详细看《零死角玩转stm32-初级篇》 66页。
2:仿真:
首先是仿真设置,主要是设置外部晶振频率。
3:逻辑分析仪的使用
点逻辑分析仪----选setup---在Current Logic Analyser Signals中 添加 PORTA 然后选择下面 Display Type 中选bit即可
4:MDK中的空语句写法
__NOP(); 注意前面是两杠 定义在core_cm3.h中
以下为原程序:
#include"stm32f10x.h" #define LED0_ON GPIO_SetBits(GPIOA,GPIO_Pin_8) // LED0开 #define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0关 #define LED1_ON GPIO_SetBits(GPIOD,GPIO_Pin_2) //LED1开 #define LED1_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_2)//LED1关 //初始化IO端口 void IO_Configuart(void) { GPIO_InitTypeDef GPIO_InitStructure;//定义 GPIO_InitStructure为 GPIO_InitTypeDef结构体类型 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//允许总线CLOCK,在使用GPIO之前必须允许相应的端口时钟 //配置GPIOA_8 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引脚选择 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化 //配置GPIOD_2 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//引脚选择 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化 } //复位和系统时钟控制 void RCC_Configuare(void) { SystemInit();//频率设定有system_stm32f10x.c文件中的宏定义 开放某个宏 当调用SystemInit()时即可设置好频率 RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能时钟安全系统 } void Delay(u16 speed) { u16 i=0; while(speed!=0) { speed--; for(i=0;i<400;i++); } } int main(void) { IO_Configuart(); RCC_Configuare(); while(1) { LED0_ON; LED1_OFF; Delay(2000); LED0_OFF; LED1_ON; Delay(2000); } }
#include"stm32f10x.h" #define LED0_ON GPIO_SetBits(GPIOA,GPIO_Pin_8) // LED0开 #define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0关 #define LED1_ON GPIO_SetBits(GPIOD,GPIO_Pin_2) //LED1开 #define LED1_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_2)//LED1关 //初始化IO端口 void IO_Configuart(void) { GPIO_InitTypeDef GPIO_InitStructure;//定义 GPIO_InitStructure为 GPIO_InitTypeDef结构体类型 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//允许总线CLOCK,在使用GPIO之前必须允许相应的端口时钟 //配置GPIOA_8 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引脚选择 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化 //配置GPIOD_2 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//引脚选择 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化 } //复位和系统时钟控制 void RCC_Configuare(void) { SystemInit();//频率设定有system_stm32f10x.c文件中的宏定义 开放某个宏 当调用SystemInit()时即可设置好频率 RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能时钟安全系统 } void Delay(u16 speed) { u16 i=0; while(speed!=0) { speed--; for(i=0;i<400;i++); } } int main(void) { IO_Configuart(); RCC_Configuare(); while(1) { LED0_ON; LED1_OFF; Delay(2000); LED0_OFF; LED1_ON; Delay(2000); } }
相关文章推荐
- 天九幸福集团主席讲述城市建设需要大家共同努力
- event 事件 ctrlKey提交留言
- git命令总结2
- java二分法查找两种实现方法
- 配置JDK
- android学习笔记——AsyncTask异步消息处理机制简单介绍及使用
- STM32:STM32学习记录1:MDK基本数据类型及代码优化
- 卢俊卿就城市环境问题从三个角度进行分析
- Web存储——sessionStorage与localStorage
- System.Web.Optimization找不到引用
- 哈夫曼树算法压缩文件
- android学习笔记——android多线程编程初探
- ArcGIS Engine 开发中一些常用的语句
- STM32:如何用JLINK ULINK JTAG 查看 KEIL /MDK 某条指令执行时间
- Bluetooth 4.0之Android 解说
- 第二周作业
- 送给儿子十八岁成人礼 卢俊卿谆谆教导儿子成长路
- 构建之法阅读笔记01
- 安卓移动浏览器开源项目优分享浏览器的介绍
- FindBugs的使用