STM32_GPIO之点亮LED实验

发布者:中华古风最新更新时间:2018-07-21 来源: eefocus关键字:STM32  GPIO  点亮LED 手机看文章 扫描二维码
随时随地手机看文章

/* 

名称:STM32_GPIO之点亮LED 

说明:对于STM32来说,其对LED的操作基本上也是操作对应的IO口。不过, 

和51不同的是,STM32为了兼顾各个设备,其配有时钟树,所以在使用对应 

设备的时候,需要实现配置好时钟树(库函数中配置了),并开启相应的设备 

时钟(这里是对应的GPIO端口)。


其次,STM32的IO端口比51单片机要复杂的多,要配置很多东西(如工作模式、工作速度等等)。对于51单片机来说,其IO口的使用(无论是输入还是输出),直接操作对应的寄存器就可以。然后,对于GPIO口的操作,一般来说对于STM32,并不是直接操作对应的寄存器。而是通过已有的固件库,以库函数的形式来写入、读出、配置等。 这个固件库在我看来,就像是在硬件上封装了一组接口函数,在一定程度上减轻了对硬件的依赖(对程序员来说)。


???—在程序中有个问题还没搞清楚:因为STM32GPIO端口的操作一次都是32位的,这样的话,如果端口中有一些引脚用作输入,一些引脚用作输出,这样的话,操作起来就会有些麻烦。在本程序中,一开始,是把GPIOB的一半引脚(0-7)用作按键输入,另一半引脚(8-15)用作LED输出。输出数据的时候先读出引脚,在进行或操作(为了防止输出错误的数据至0-7的输入端口) 实验结果和预期的不一样。最后我是换了另一个端口GPIO来进行按键输入,实验成功。可我感觉原来的理论上是可以的?问题出在哪还没搞清楚,在此记录一下,以后有机会在研究吧。—???


*/


#include "led.h"



uint16_t _data1[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,

                                                0x83,0xC6,0xA1,0x86,0x8E

                                                };              //点亮数码管


//LED端口配置

void LED_GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|

    GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14

    |GPIO_Pin_15 ;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


    GPIO_Init(LED_PORT, &GPIO_InitStructure);


    GPIO_SetBits(LED_PORT,  ALLLED );


}



//打开LED

void LedOn(uint16_t GPIO_Pin_x)

{

    GPIO_SetBits(GPIOB,GPIO_Pin_x);

}



//关闭LED

void LedOff(uint16_t GPIO_Pin_x)

{

    GPIO_ResetBits(GPIOB,GPIO_Pin_x);

}


//打开所有LED

void AllLedOn()

{

    GPIO_SetBits(GPIOB,ALLLED);

}


//关闭所有LED

void AllLedOff()

{

    GPIO_ResetBits(GPIOB,ALLLED);

}


//单极数码管显示数字

void ShowNum(unsigned char num)

{

    uint16_t write_data = 0;


    if(num >= 'A' && num <= 'F')

        num = num - 'A'+10; 


    //write_data = _data1[num]<<8 |(GPIO_ReadInputData(LED_PORT) & 0x00FF);         //前期用法:写入的数据左移8位,然后和读入的数据进行或操作


    write_data = _data1[num]<<8;            //写入的数据左移8位


    GPIO_Write(LED_PORT,write_data);        //向端口写入数据

}


关键字:STM32  GPIO  点亮LED 引用地址:STM32_GPIO之点亮LED实验

上一篇:STM32_GPIO之按键输入
下一篇:总结C51、STM32和S3C2440的时钟体系和定时器

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

如何选择支持GUI的STM32
作为嵌入式系统核心的MCU,以往由于性能受限,难于支持GUI所需的图形显示的要求。而现在这已经成为了历史,一大波图形显示MCU已经来了! ★ 硬件功能配置 ★ 从2011年推出高性能STM32F4产品以来,ST不断在图形显示MCU上投入研发资源,先后推出了STM32F7、STM32H7、STM32L4+等产品系列,目前STM32具有图形显示接口(LCD-TFT接口或MIPI-DSI接口)的子产品线已有6条之多。大家可以从图1中看到STM32图形显示产品的全貌。 图1,STM32图形产品一览 为了支持HMI/GUI中的图形处理的需要,STM32图形显示MCU产品中包含一些列特殊功能: √ Chrom-ART加速器:用于提升2
[单片机]
如何选择支持GUI的<font color='red'>STM32</font>
浅谈STM32的端口输出方式
STM32有两个寄存器可以控制IO输出, 一个是ODR寄存器, 只使用了低16位. 向此寄存器写数据, 就可以控制某个引脚的输出电平. BSRR寄存器是端口位设置/清除寄存器. 此寄存器和ODR寄存器有类似的功能, 都可以来用设置GPIO端口输出.此寄存器分为高16位和低16位, 向高16位的某位写1清除对应ODR寄存器位(输出0), 写0无影响. 向低16位某位写1置位对应ODR寄存器位(输出1), 写0无影响. 可见两个寄存器均可以控制IO输出, 从上文可知写BSRR实际上是可以影响ODR寄存器的值的, 那么使用这两个寄存器控制输出有什么区别呢? 在ST的手册中有这样的说明(RM0090 266页): Each I/O por
[单片机]
10.利用STM32定时器的PWM输出功能,直接获取PWM波形
本实验向大家展示如何输出占空比固定的PWM波形。 1.工程的建立: 2.主函数代码: 3.pwm_output.c代码: 4.output.h代码: 5.结果: 6.结果显示不出来的请看上几节的文章,已解决。
[单片机]
10.利用<font color='red'>STM32</font>定时器的PWM输出功能,直接获取PWM波形
stm32 通用定时器中断
void TIM_DeInit(TIM_TypeDef* TIMx) // 用初始化参数初始化定时器的寄存器 TIMx: where x can be 1 to 17 to select the TIM peripheral. TIM Output Compare Init structure definition void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) void TIM_OC1NPola
[单片机]
STM32 USB Virtual COM USB转串口的功能实现
这次讲的是如何实现USB转串口功能的实现。首先看看工程的布局吧: 我们主要要介绍的文件的在USB_User这个组文件。从上面的截图可以看到USB_User这个文件由hw_config.c、usb_desc.c、usb_endp.c、usb_istr.c、usb_prop.c、usb_pwr.c几个文件组成。其中usb_istr.c和usb_pwr.c整两个文件不用修改,其他的文件都需要修改。下面接慢慢将来。 首先讲讲hw_config.c这个文件。由于我们用到串口,所以这个文件需要添加串口相关代码。在这个文件的开始就需要定义一下串口的相关变量: uint8_t USART_Rx_Buffer ; //串口接收缓冲 ui
[单片机]
<font color='red'>STM32</font> USB Virtual COM USB转串口的功能实现
STM32 通用定时器 介绍
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 时钟源问题: 名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在 APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。 下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个
[单片机]
<font color='red'>STM32</font> 通用定时器 介绍
STM32开发笔记20: STM32L053R8T6的keil配置
单片机型号:STM32L053R8T6 使用STM32CubeMX生成STM32L053R8T6相关的应用程序代码后,使用Keil开发环境第1次下载的时候,提示如下错误,我使用F0和F4的单片机,没有遇到过。 仔细查看工程设置,原因在工程设置中,我们需加入相应的Flash配置信息,如下图所示,具体的选择,要根据单片机的类型,我们可以仔细查看数据手册。 但下载的时候,偶尔还会提示如下错误: 这件事情网上说了很多的解决方法,我自己测试,更改2处Keil的设置既可以解决,如下图所示。 此2处更改后,反复下载程序,亦不再报错。
[单片机]
<font color='red'>STM32</font>开发笔记20: STM32L053R8T6的keil配置
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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