【菜鸟入门】stm32的第一个程序--LED

发布者:红尘清梦最新更新时间:2020-03-02 来源: eefocus关键字:stm32  LED  管脚配置 手机看文章 扫描二维码
随时随地手机看文章

经过今天一天的努力终于完成了我的stm32第一个程序;我也是今天才开始接触stm32。


由于苦于没有资料,木有例程,找到的例程都是带有库的,这样对stm32基础的管脚配置就不容易懂了,主要是没有一个具体的轮廓。


经过对库文件的研究,和看了好几节视频,又根据自己以前搞430和arm9的经验,就按着以前的思路进行研究,终于开发出自己的第一个LED程序;


1、创建工程


(1)Project  -->   New uvision Project 


(2)选择工程要保存的地方


(3)选择CPU


(4)选择“是”(如果你使用从STM下载的库的话,就选“否”)




(5)修改一下代码(如果不注视掉红色部分,会出现错误)


; Reset handler

Reset_Handler   PROC

                EXPORT  Reset_Handler             [WEAK]

                IMPORT  __main

;IMPORT  SystemInit

                ;LDR     R0, =SystemInit

                ;BLX     R0

                LDR     R0, =__main

                BX      R0

                ENDP





(6)加入定义


Flash  --> Flash config tools -->  C/C++  -->


在Defines里面添加:STM32F10X_HD


不然也会提示错误!


(7)Jlink下载设置(如果你用的是Jlink可以设置下)


在(6)的Flash config tools中的Debug中选中use [J-LINK / J-Trace Cortex ] -->Setting --> Flash Download 按照如下设置




这样算是大致设置好了。




2、编写时钟初始化程序



int sys_init(unsigned char PLL)

{

unsigned char temp = 0;

RCC->CR |= 1<<16; //OPEN HSE 

while(!(RCC->CR>>17));

RCC->CFGR = 0x04<<8; //APB1 HSE/2

PLL -= 2; //9-2 = 0111b

RCC->CFGR |= PLL << 18; //0111 ==> X9

RCC->CFGR |= 1 << 16; //PREDIV1 ouput as source of PLL

FLASH->ACR |= 0x32; //With

RCC->CR |= 1<<24; //enable PLL [24bit]

while(!(RCC->CR >> 25));

RCC->CFGR |= 0x2<<0;//PLL As System Clock

while(temp != 0x02)

{

temp = RCC->CFGR >> 2;

temp &= 0x03;

}

return 0;

}



具体数值为什么这么配置,请看寄存器


3、延时函数


为了实现准确延时,我们选用SysTick


void delay_ms(int timeout)

{

  u32 temp = 0;

SysTick->CTRL = 0xfffffffb;

SysTick->LOAD = timeout*9000;

SysTick->VAL  = 0x00;

SysTick->CTRL = 0x01;

do{

temp = SysTick->CTRL;

}while((temp&0x01)&&!(temp&(1<<16)));

SysTick->CTRL = 0x00;

SysTick->VAL  = 0x00;

}


这里的timeout不能超过一个值,具体多大可以自己计算下;

LOAD为24位 0xffffff/9000 = timeout_max;【注:感谢@大黄同学的帮我指出错误!!可以看下下面的寄存器】




STK_LOAD可用位数为[23:0];【再次感谢大黄!!!】


4、LED灯的控制


我的板子LED灯与stm32的pin是这样对应的


LED1  -->  PE1

LED2  -->  PE0      

LED3  -->  PE2       

LED4  -->  PE3


我这里准备对LED2/PE0进行操作


int main()

{

    sys_init(9);    //系统时钟初始化72M = 8M X 9

RCC->APB2ENR |= 1<<6;  //使能GPIOE的时钟

GPIOE->CRL &= 0xFFFFFFF0;//清除PE0的控制位

    GPIOE->CRL |= 0x00000003; //选用输出模式 --->50MHz

    GPIOE->ODR |= 1<<0;//设置PE0位输出模式

   //GPIOE->BRR = 1<<0;//设置PE0输出的电平

    while(1){

        delay_ms(1000);

        GPIOE->BRR = 1<<0;//

        delay_ms(1000);

        GPIOE->BSRR = 1<<0;//

    }

}

关键字:stm32  LED  管脚配置 引用地址:【菜鸟入门】stm32的第一个程序--LED

上一篇:【菜鸟入门】stm32 之 eeprom
下一篇:【STM库应用】stm32 之 TIM (详解二 脉冲宽度、周期测量)

推荐阅读最新更新时间:2024-11-10 20:04

STM32 IIC通信往24C02写数据、读数据
1、24C02模块的原理图:从图中可以看出,A0、A1、A2三个引脚全部接地,说明表示器件地址7位数据后三位全部是0 注:当上一个数据写完之后,若发送停止信号,则至少停下10ms时间后,才能再发送起始信号,这个时间就叫做写周期。 3、器件寻址: 4、字节写: 5、写页: (1)、用页写,CAT24WC01可一次写入8个字节的数据,CAT24C02/04/08/16可以一次写入16个字节的数据。 (2)、页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号,主器件还可以被允许额外再发送7或者15个字节。 (3)、每发送一个字节数据后CAT24WCxx产生一个
[单片机]
<font color='red'>STM32</font> IIC通信往24C02写数据、读数据
STM32正交编码器编程
如图,STM32的每个TIMER都有正交编码器输入接口,TI1,TI2经过输入滤波,边沿检测产生TI1FP1,TI2FP2接到编码器模块,通过配置编码器的工作模式,即可以对编码器进行正向/反向计数。 如下图,编码器使用了A,B两相信号,但是我只需要对TI1信号进行计数(第一行),我也是刚发现了这个错误,原来对两个信号都计数,导致码盘转一周得到不止100个脉冲(100线的光电码盘)。通过STM32的编码器模块比较两想的电平信号就可以很容易地计算出编码器的运行情况了。 代码如下: void Decoder_Configuration(void) { GPIO_InitTypeDef GPIO_InitSt
[单片机]
<font color='red'>STM32</font>正交编码器编程
STM32其他问题集锦
1、使用JTAGdownload程序至STM32F205XX(withCortex-M3) 问:請教各位先進,若欲使用JTAGinterface下載程序至STM32F205XX的板子,似乎一般是透過SEGGER的J-link,是否可使用其他的JTAG-USB下載線如Altera出的USBBlaster? 又是否只要符合JTAG規範的傳輸線皆可? 答1:只要支持M3并且支持STM32F2XX系列就可以,不一定非要JTAG,也可以使用SWD。 答2:ARMKEILULINK也行,兼容性非常好呀! 2、STM32触摸屏 问:我想用STM32来触摸一款触摸屏,因为我现在还不了解STM32以及触摸屏,所以我想问一下
[单片机]
STM32中学到的工程建立方法
这阵子通过STM32的学习,学到的不仅仅是硬件的知识,关于工程的结构也学到了一些实用的东西。以前学习51的时候就是一个文件写到底,把所有的函数写到一个c文件中,所有的变量也定义在一个c文件中。 但是这阵子接触到了模块化的思想,每一个外设,对应着一个单独的驱动程序,包括一个c文件还有一个h文件。在建立工程之后,先建立组,包括USER,可以把主文件放在这个组里面;SYSTEM组,可以吧系统的一些通用型文件放在这个组里面;HARDWEAR组,可以把外设放在这个组里面。还可以建立一个组放说明性的文件。这样使得整个工程的结构十分的清晰,在调试程序的时候十分方便,在以后自己重新看这个工程的时候也可以很快的理清整个工程个脉络。 在
[单片机]
基于STM32从零写操作系统系列---使用C语言
目的 C语言,相对于汇编有更好的可读性,便于维护等优点。下面实验将使用C语言实现点亮LED灯。C语言与硬件是紧密连在一起的,结合芯片中的flash和sram,简单了解C语言。 要求 1.有一定的C语言基础 2.了解编译链接脚本 3.了解stm32F103的硬件结构 实验源代码在这下载,代码中有详细注释! 分析 1.首先了解硬件,如图 FLASH,就是存放.bin文件的地方。SRAM,用于存放程序的堆栈,全局变量。 2.了解链接脚本,如图: MEMORY,用于定义存储器范围。 AT rom,表示将对应的SECTION放置到rom中,即Flash中。 _data_start / _data_end,用
[单片机]
基于<font color='red'>STM32</font>从零写操作系统系列---使用C语言
STM32 输入捕获模式的滤波器设置
一.设置TIMx_CR1的CKD 位,设置时钟分频因子得到fDTS。如下图: 二设置TIMx_CCMR1寄存器的IC1F 位。滤波采样频率和采样次数。如下图 举例:定时器输入时钟频率fCK_INT=72M。CKD =10(B)。IC1F =1111(B)。定时器设置为1通道捕获 fDTS=fCK_IN/4=72M/4=18M 采样频率fSAMPLING = fDTS/32=18M/32=0.5625M 所以滤波的长度=1/fSAMPLING *N=1/0.5625M*8=14.2US。这样捕获通道的滤波器就会滤掉低于14.2us的脉冲干扰 也就是说滤波器会以fSAMPLING的频率采样8次,如果8次都为高电平则确定为上
[单片机]
stm32的中断与事件
事件:是表示检测有一某件触发事件发生了。 中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。 事件可以触发中断,也可以不触发 中断有可能被更优先的中断屏蔽,事件不会 事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒). 事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved