历史上的今天
今天是:2025年01月17日(星期五)
2019年01月17日 | STM32:STM32学习记录2:跑马灯及仿真
2019-01-17 来源:eefocus
以下为自己编写的跑马灯程序,其中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中
以下为原程序:
#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);
}
}
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 一、H.264概述与MPEG-X的区别 随着市场的需求,在尽可能低的存储情况下获得好的图像质量和低带宽图像快速传输已成为视频压缩的两大难题。为此IEO/IEC/和ITU-T两大国际标准化组织联手制定了新一 ...… 查看全部问答> |
|
GAIA模块知识简介: 1、公司简介: GAIA公司成立于1987年,原来是法国汤母讯公司的电源研发部,原本开发产品低同应汤母逊公司需求,越做越大,后成立GAIA公司,公司获得欧洲军标DE ...… 查看全部问答> |
|
1、为什么我“Open”或是“Import”打不开项目文件啊? 答:我们对于项目文件和单个文件的打开是有区别的。“Open”是打开以我们青越锋软件保存的文件,“Import”则是导入其他文件的格式,目前支持ASCII格式。而打开项目则是通过“Project”来处 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:05 编辑 51单片机小精灵,据说不懂单片机也能编程 其实就是一些小工具的合集,看了下,还是挺实用的软件 … 查看全部问答> |
|
请教:电话的听筒是130欧姆,我设置了一个电话板,怎么修改耳机电路才能用30欧姆的耳机? 用的电话芯片是TEA1062, SPK终于电容C接到耳机上; SPK与GAR之间有电阻R。 试验发现: R=100K,C=1UF时,用电话听筒质量非常好;但是用30欧姆耳机的话,噪声严重,并且有破声。 R=100K,C=0.1UF时,用电话听筒质量非常好;用30欧姆耳机的 ...… 查看全部问答> |
|
求助: 小弟想在一个inf文件中安装两个driver,但又不想在device管理里显示为一种设备类,想把两个driver分别显示在两个不同的device类中,不知如何是好?.望不吝赐教! 感激不尽! … 查看全部问答> |
|
我想转换integer类型的信号为real类型 程序如下。 这段程序在maxplus II报错: file standard.vhdl:Unsupported feature error:floating is not supported 在quartus II中报错: Error (10414): VHDL error at yuvtorgb.vhd(22), at object \" ...… 查看全部问答> |
|
这个应用笔记说明了如何使用大容量的STM32F10xxx的FSMC(灵活的静态存储器控制器)驱动一组外部的存储器。文中首先简要地介绍了STM32F10xxx的FSMC控制器,然后给出了包含典型的FSMC配置的存储器接口实例,以及时序计算和硬件连接方法。 本应用 ...… 查看全部问答> |




