STM32-点灯程序

最近学习使用STM32,做个记录吧。
刚接触,就先从点灯程序开始。单片机的点灯程序,就相当于学语言的hello world程序了。

先简单介绍下开发环境,芯片类型是STM32F030C8,集成开发环境用的是Keil5 MDK-ARM,仿真器使用JLINK。

要点灯,先要确定接灯的引脚。我的板子上是PA0接的一个led灯。
在程序中,就是GPIO_Pin_0了。为了扩展性,或者说,为了方便修改引脚,我使用了一个函数来封装。如下:

int get_gpios(){    
    return GPIO_Pin_0 ;//连接到灯的gpio引脚,可以有多个        
}

要点灯,也就是要将这个引脚设置为输出,并控制它的高低电平。我们先来进行初始化设置:

void LED_Init(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;
  
  /* 使能GPIOA时钟 */  
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

/* 配置LED相应引脚PA1*/
  GPIO_InitStructure.GPIO_Pin = get_gpios();
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
    
  GPIOA->BSRR = get_gpios() ;//点亮灯        
}

具体的闪灯的实现,也写了一个函数,方便后面调用:

int flag_led_on=0;

void LED_toggle(){    
    flag_led_on = 1 - flag_led_on;    
    if(flag_led_on!=0){
        GPIOA->BRR = get_gpios() ;     //reset
    } else {
        GPIOA->BSRR = get_gpios() ;    //set
    }        
}

这样,主体的功能就完成了,剩下的就是在主循环中进行调用了。
主函数非常简单:

int main(void)
{

LED_Init();//灯的初始化
        
    while(1){
        Delay(1600000);//延时1s
        LED_toggle(); //LED翻转
    }

}

这里还有一个新函数:Delay(),就是一个延时函数。为了简化代码,所以延时函数没有使用定时器,是简单的循环等待。如下:

void Delay(uint32_t nCount) 
{
     for(; nCount != 0; nCount--);
}

至此,这个点灯程序就完成了,是不是很简单。

另外,简单说明下延时函数为什么使用了 1600000 为参数。
是我通过实验,发现设置为这个值对应的时间基本上是1s。
但是,在不同的板子上,程序做不同的优化,或者延时代码的写法有所不同,都会导致延时时间的差异。具体取值可以自己根据实际运行情况调整。

以后,我再仔细分析下这个取值的道理。

这个demo的工程代码,可以从如下地址获取:

https://download.csdn.net/download/lintax/10734630

STM32-点灯程序相关推荐

  1. CH340进行STM32单片机程序烧录

    目录 代码: 接法: 结束: 刚写完32点灯程序,接下来打算用CH340进行烧录 代码: #include<stm32f10x.h> void led_init(){ GPIO_InitT ...

  2. STM32G070RBT6基于Arduino框架下点灯程序

    STM32G070RBT6基于Arduino框架下点灯程序 ✨说明:Arduino STM32系列开发环境搭建不在本示例范围内. 相关篇<[硬件开源电路]STM32G070RBT6开发板> ...

  3. STM32 UART2程序--端口重映射

    STM32 UART2程序 2012-12-04 16:26:05 分类: LINUX USART1程序很多,看看USART2程序.注意红色部分,首先要使能相关端口的时钟. 因为USART2可以映射成 ...

  4. 嵌入式作业使用MDK编译stm32简单程序

    目录 一.MDK和stm32介绍 1.什么是stm32 2.什么是MDK 二.环境配置 1.准备工作 2.安装keil软件 3.keil的环境设置 三.stm32程序编译 1.新建工程 2.新建mai ...

  5. STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板

    STM32下载程序至SRAM--基于正点原子精英STM32F103ZET6开发板 如题,由于STM32的FLASH烧写寿命在1万次左右,对于本人这样的改一行代码都想下载到开发板中测试的强迫症患者,真是 ...

  6. Vscode开发STM32单片机程序

    STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的.这里介绍一些使用 gcc + vscode 开发单片机程序的经验.(这里不解释 gcc 是什 ...

  7. ch340串口驱动_如何使用串口来给STM32下载程序

    前言 第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成.后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进 ...

  8. 树莓派c语言编程点亮灯,树莓派点灯程序

    一:树莓派GPIO操作的常用命令 1,gpio readall  //读出树莓派的所有管脚的配置情况.电平状态; 2,设置管脚的电平状态 gpio -g mode 26 out 设置管脚为输出模式,- ...

  9. STM32 烧录程序后无法在内部FLASH保存数据问题解决

    STM32 烧录程序后无法在内部FLASH保存数据问题解决 新接手一套代码,要求在Flash特定区域保存数据.硬件为STM32F030C6,有32k Flash. 原代码中已经将数据打包成一个结构体, ...

  10. 使用CH340串口模块对STM32进行程序下载

    使用CH340串口模块对STM32进行程序下载 一.接线 二.利用FlyMcu进行STM32程序下载 1.STM32配置 2.FlyMcu配置 一.接线 CH340 STM32 VCC VCC GND ...

最新文章

  1. Javadoc代码追踪记录
  2. python设计一个动物类_python面向对象 动物园 例题
  3. 用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue
  4. 黑客攻击澳大利亚政府网站 抗议互联网过滤器
  5. Java Eclipse开发环境搭建及注意事项
  6. SSM框架知识点复习
  7. 马斯克再带货狗狗币:超7成网友票选狗狗币为未来货币
  8. UIAppearance
  9. 分布式服务框架之Dubbo简介
  10. Go语言:运行代码报错main redeclared in this block previous declaration at .\test.go:5:6
  11. 设计模式(一)单例模式:1-饿汉模式(Eager)
  12. 司空见惯 - 体彩中奖交多少税
  13. 转贴--爱的最高境界
  14. 好兄弟结婚,送给他的小诗
  15. Android之重写与重载
  16. :hover的几种选择用法
  17. 搭建自己的github.io博客
  18. 【个人研究】21世纪西方运用脑电(EEG)的音乐研究动向分析(一)
  19. CATIA V5焊接夹具2D出图到3D实战设计视频教程
  20. 特斯拉上海工厂二期进展神速:已经开始建造屋顶

热门文章

  1. 工作快两年了!斗胆谈谈校招社招技术面试那些事
  2. git小文件时报错Remote origin does not support the LFS
  3. 十大常见的用户认知偏差
  4. 石墨烯在生物医学上应用的研究进展_多孔石墨烯的制备及应用
  5. Singer混沌映射(含MATLAB代码)
  6. 谈谈对CAP定理的理解
  7. 准备使用Office 365中国版--购买
  8. Android Studio中的button修改不了背景颜色
  9. NLP学习-Task 3: 子词模型Subword Models
  10. 【c语言】一个整数加上100后是一个完全平方数,再加上168又是一个完全平方数,问该数是多少?