STM32F103ZEGPIO口的配置以流水灯为例

发布者:TechWhizKid最新更新时间:2018-10-08 来源: eefocus关键字:STM32F103ZE  GPIO口  流水灯 手机看文章 扫描二维码
随时随地手机看文章

设置步骤:

1.使能外设时钟如PA,PB,PE.

2.设置成所需状态。这里是推挽输出 50Khz速率

3.设置输出状态,是高电平还是低电平。可用ODR,BSRR,BSR均可设置。

代码如下:

#include “stm32f10x.h”

extern void Stm32_Clock_Init(u8 PLL);


void delay(u32 t)//简单延时函数,减计数

 {

     for(;t>0;t--);

 }

void XYDRCC_DeInit(void) //复位时钟函数,一般可省略不写

 {

     RCC->APB1RSTR = 0x00000000;//复位APB1外设复位寄存器

     RCC->APB2RSTR = 0x00000000; //复位APB2外设复位寄存器

     RCC->AHBENR = 0x00000014; //使能睡眠模式闪存和SRAM时钟,其他关闭

     RCC->APB1ENR = 0x00000000; //APB1外设时钟关闭

     RCC->APB2ENR = 0x00000000; //APB2外设时钟关闭

     RCC->CR |= 0x00000001;     //内部高速时钟使能 HSION置1

     RCC->CFGR &= 0xF8FF0000;

     //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0] 

     RCC->CR &= 0xFEF6FFFF;     //复位HSEON,CSSON,PLLON

     RCC->CR &= 0xFFFBFFFF;     //复位HSEBYP    

     RCC->CFGR &= 0xFF80FFFF;   //复位PLLSRC,PLLXTPRE,PLLMUL[3:0],USEPRE

     RCC->CIR = 0x00000000;     //关闭所有中断

  }

void Stm32_Clock_Init(u8 PLL)//倍频后,把PLL作为系统时钟

 {

     unsigned char temp=0;   

     XYDRCC_DeInit();  

     RCC->CR|=0x00010000;// 外部高数时钟使能 HSEON置1

     while(!(RCC->CR&0x01<<17));//等待外部时钟就绪

     RCC->CFGR=0X00000400;//APB1=DIV2;APB2=DIV1;AHB=DIV1; 

     PLL-=2;//111表示9,PLL-2

     RCC->CFGR|=PLL<<18;//设置为9倍 

     RCC->CFGR|=1<<16;//PLLSRC ON 

     FLASH->ACR|=0x32;//FLASH2个延时周期

     RCC->CR|=0x01000000;//PLLON 

     while(!(RCC->CR&0x01<<25));//等待PLL锁定

     RCC->CFGR|=0x00000002;//PLL作为系统时钟

     while(temp!=0x02) //等待PLL作为系统时钟,设置成功

      {   

           temp=RCC->CFGR>>2;

           temp&=0x03;

      }    

 }

int main()

 {

     Stm32_Clock_Init(9);

     RCC->APB2ENR=(1<<2)|(1<<3)|(1<<6);//使能PA,PB,PE时钟

     GPIOA->CRL&=~(0xf<<(4*5));//复位PA5

     GPIOA->CRL|=0x03<<(4*5);//PA5配置成推挽输出,50Mhz速率

     GPIOA->CRL&=~(0xf<<(4*6));//复位PA6

     GPIOA->CRL|=0x03<<(4*6);//PA6配置成推挽输出,50Mhz速率

     GPIOB->CRL&=~(0xf<<(4*5));//复位PB5

     GPIOB->CRL|=0x03<<(4*5);//PB5配置成推挽输出,50Mhz速率

     GPIOE->CRL&=~(0xf<<(4*5));//复位PE5

     GPIOE->CRL|=0x03<<(4*5);//PE5配置成推挽输出,50Mhz速率

     while(1) 

      {

           GPIOB->BSRR=1<<(5+16);//PB5输出低电平

           delay(6553600);

           GPIOB->BSRR=1<<(5);//PB5输出高电平

           GPIOE->BSRR=1<<(5+16);//PE5输出低电平

           delay(6553600);

           GPIOE->BSRR=1<<(5);//PE5输出高电平

           GPIOA->BSRR=1<<(5+16);//PA5输出低电平

           delay(6553600);

           GPIOA->BSRR=1<<(5);//PA5输出高电平

           GPIOA->BSRR=1<<(6+16);//PA6输出低电平

           delay(6553600);

           GPIOA->BSRR=1<<(6);//PA6输出高电平

      }

 }


关键字:STM32F103ZE  GPIO口  流水灯 引用地址:STM32F103ZEGPIO口的配置以流水灯为例

上一篇:STM32注释风格
下一篇:stm32普通IO口模拟iic时序

推荐阅读最新更新时间:2024-03-16 16:15

avr单片机八位流水灯程序
八位流水灯程序 单片机源程序如下: #include iom16v.h #define uint unsigned int #define uchar unsigned char void Delay_ms(uint k) { uint i,j; for(;k 0;k--) for(i=142;i 0;i--) for(j=2;j 0;j--); } void port_init(void) { DDRD=0xff; PORTD=0xff; } void main(void) { uchar temp,i; port_i
[单片机]
PIC单片机实现流水灯程序
#include pic.h //流水灯 #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); void delay(uint x) { uint a,b; for(a=x;a 0;a--) for(b=110;b 0;b--); } void main() { uchar i,temp; TRISA=0x00; while(1) { temp=1; for(i=0;i 6;i++) { PORTA=~temp;// temp=temp 1;// delay(200); } } }
[单片机]
流水灯来回点亮程序(汇编和C)
前头看单片机c语言,忘了汇编,这几天跟几位兄弟去给下面的师弟师妹上实验课,用的是wave的实验箱。用汇编语言编程。算是一个复习。 汇编: ORG 0000H JMP MAIN ORG 30H MAIN: MOV A,#0FFH CLR C MOV R2,#08H LOOP1: ; 实验中二极管低电平点亮,loop1带进位位的循环左移 RLC A MOV P1,A CALL DELAY DJNZ R2,LOOP1 MOV R2,#07H LOOP2: ;loop2循环右移动 RR A MOV P1,A CALL DELAY
[单片机]
Cortex入门stm32流水灯实验_程序解读
test.c 包括3个头文件 #include stm32f10x_lib.h stm32的一些库函数 #include sys.h 系统时钟初始化及一些延时函数 #include led.h 流水灯相关程序 ========================================================================= 先看一下 stm32f10x_lib.h 里面又包括一个头文件 #include stm32f10x_map.h 接下来是类似 #ifdef _ADC #include stm32f10x_adc.h #endif #ifdef _BKP #include
[单片机]
STM32F103ZEGPIO口的配置以流水灯为例
设置步骤: 1.使能外设时钟如PA,PB,PE. 2.设置成所需状态。这里是推挽输出 50Khz速率 3.设置输出状态,是高电平还是低电平。可用ODR,BSRR,BSR均可设置。 代码如下: #include “stm32f10x.h” extern void Stm32_Clock_Init(u8 PLL); void delay(u32 t)//简单延时函数,减计数 { for(;t 0;t--); } void XYDRCC_DeInit(void) //复位时钟函数,一般可省略不写 { RCC- APB1RSTR = 0x00000000;//复位APB1外设复位寄存器 RCC- APB2RST
[单片机]
移植ucosII到STM32F103ZE(四)
a) 根据stm32f103芯片对系统文件进行修改 根据AN-1018.pdf 和移植详解介绍的移植基础知识,对OS-uCOSIIport 下的代码解释下。 并进行相关特性修改。 os_cpu.h #ifdef OS_CPU_GLOBALS #define OS_CPU_EXT #else #define OS_CPU_EXT extern #endif typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef unsign
[单片机]
用c语言编写单片机流水灯程序详解
用C语言编写的单片机流水灯程序的软件和硬件,可以让八个LED轮流点亮,每个灯点亮和熄灭时间均为1秒。是利用单片机I/O口控制外部设备的简单例子。当然,在你掌握了本程序后,完全可以充分发挥你的想象,改变一下程序内容和灯的接法(比如用光耦驱动继电器来控制霓虹灯),做出各种变化非凡的大型灯光广告牌。 一、硬件电路 因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口,我们这里只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振荡电路组成时钟振荡器
[单片机]
用c语言编写单片机<font color='red'>流水灯</font>程序详解
STM32程序编写基本流程(LED流水灯)
LED流水灯程序初始化流程 //1.定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure; //2.开启GPIOC的外部时钟,不同的外设开启不同的时钟,IO口复用时两个时钟都要开启。stmf10x_rcc.h RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //3.设置要控制的GPIO管脚 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; //4.设置管脚模式,推挽输出 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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