目录

一、STM32F103C8T6简介

二、使用寄存器点亮LED灯

1.工程模板的建立

2.建立工程

3.主要函数代码

4.编译生成HEX文件

5.电路搭建

6.用串口下载程序

7.实验结果


一、STM32F103C8T6简介

根据STM32&STM8产品型号命名规则(参考:STM32单片机最小系统详解)可知: STM32F103C8T6这个命名中:STM32代表STM32家族,32位MCUF代表产品类型为基础型;

103代表特定功能为STM32基础型;C代表引脚数为48&49引脚;8代表内存容量为64KB;T代表封装为QFP;6代表温度范围为-40到+85℃。

STM32原理图

二、使用寄存器点亮LED灯

1.工程模板的建立

新建一个文件夹用来存放项目的全部程序,然后再建CORE,HARDWARE,OBJ,USER,STM32F10x_FWLib,SYSTEM这六个文件夹。其中,HARDWARE文件夹是用来存放外设硬件代码,OBJ用来存放生成调试代码,FWLIB是各种.c和.h文件,如图:

其中每个文件夹包含的文件如下:

可以在正点原子openedv资料下载地址下载mini板的rct6资料,开发板的例程

2.建立工程

先打开 Keil uVision5->project->New uVision Project将其保存到USER文件夹中,然后芯片这里我们选择STM32F103C8

弹出Manage Run-time Environment窗口,选择取消

3.添加项目所需要的分组以及文件

右击Target 1->Manage Project Items…

然后创建Groups名字,点击右边的Add Files…按钮添加相应的文件,结果如图所示

添加后可在工作栏中查看

4.配置Options for Target 'Target 1’

点击魔法棒->Target,可以看到STM芯片为STM32F103C8,修改晶振频率值为8

点击Output,其中select folder for objects是选择生成的hex存放的目录,这里选择存放在建立的OBJ文件夹中,Create HEX File用于生成可执行代码文件

然后点击C/C++,将Define设置为USE_STDPERIPH_DRIVER,STM32F10X_MD,然后点击右下方的添加按钮添加Include Paths的路径

最终结果如图

3.主要函数代码

main.c

#include  "stm32f10x.h"
#include "delay.h"
#include "led.h"
int main(void)
{             LED_Init();   delay_init();                   while(1)                    {LED_R_TOGGLE();delay_ms(500);          LED_G_TOGGLE();delay_ms(500);               LED_Y_TOGGLE();delay_ms(500);           }
}

led.c

#include "led.h"
#include "delay.h"void LED_Init(void)
{GPIO_InitTypeDef   GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;             GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4 ;             GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;             GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;              GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10 ;            GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;             GPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;              GPIO_InitStruct.GPIO_Pin=GPIO_Pin_14 ;             GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;                GPIO_Init(GPIOC,&GPIO_InitStruct);
}void LED_R_TOGGLE(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_4);delay_ms(500);GPIO_ResetBits(GPIOA,GPIO_Pin_4);
}
void LED_G_TOGGLE(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_10);delay_ms(500);GPIO_ResetBits(GPIOB,GPIO_Pin_10);
}
void LED_Y_TOGGLE(void)
{GPIO_SetBits(GPIOC, GPIO_Pin_14);  delay_ms(500);GPIO_ResetBits(GPIOC,GPIO_Pin_14);
}

led.h

#ifndef _LED_H
#define _LED_H#include "stm32f10x.h"
void LED_R_TOGGLE(void);
void LED_G_TOGGLE(void);
void LED_Y_TOGGLE(void);
void LED_Init(void);
#endif

delay.c

#include "delay.h"
#if SYSTEM_SUPPORT_OS
#include "includes.h"
#endif
static u8  fac_us=0;
static u16 fac_ms=0;
#if SYSTEM_SUPPORT_OS
#ifdef  OS_CRITICAL_METHOD
#define delay_osrunning     OSRunning
#define delay_ostickspersec OS_TICKS_PER_SEC
#define delay_osintnesting  OSIntNesting
#endif
#ifdef  CPU_CFG_CRITICAL_METHOD
#define delay_osrunning     OSRunning
#define delay_ostickspersec OSCfg_TickRate_Hz
#define delay_osintnesting  OSIntNestingCtr
#endifvoid delay_osschedlock(void)
{
#ifdef CPU_CFG_CRITICAL_METHOD              OS_ERR err; OSSchedLock(&err);
#else                                           OSSchedLock();
#endif
}void delay_osschedunlock(void)
{
#ifdef CPU_CFG_CRITICAL_METHOD                  OS_ERR err; OSSchedUnlock(&err);
#else                                           OSSchedUnlock();
#endif
}
void delay_ostimedly(u32 ticks)
{
#ifdef CPU_CFG_CRITICAL_METHODOS_ERR err; OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err);
#elseOSTimeDly(ticks);
#endif
}//systick??????,??ucos???
void SysTick_Handler(void)
{   if(delay_osrunning==1)                        {OSIntEnter();                          OSTimeTick();                                        OSIntExit();                               }
}
#endifvoid delay_init()
{
#if SYSTEM_SUPPORT_OS                           u32 reload;
#endifSysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_us=SystemCoreClock/8000000;
#if SYSTEM_SUPPORT_OS                           reload=SystemCoreClock/8000000;                  reload*=1000000/delay_ostickspersec;     fac_ms=1000/delay_ostickspersec;              SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;     SysTick->LOAD=reload;                       SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;        #elsefac_ms=(u16)fac_us*1000;
#endif
}                                   #if SYSTEM_SUPPORT_OS                           void delay_us(u32 nus)
{       u32 ticks;u32 told,tnow,tcnt=0;u32 reload=SysTick->LOAD;                    ticks=nus*fac_us;                      tcnt=0;delay_osschedlock();                   told=SysTick->VAL;                      while(1){tnow=SysTick->VAL; if(tnow!=told){        if(tnow<told)tcnt+=told-tnow;      else tcnt+=reload-tnow+told;     told=tnow;if(tcnt>=ticks)break;                }  };delay_osschedunlock();
}void delay_ms(u16 nms)
{   if(delay_osrunning&&delay_osintnesting==0)            {        if(nms>=fac_ms)                            { delay_ostimedly(nms/fac_ms);      }nms%=fac_ms;                          }delay_us((u32)(nms*1000));
}
#else
void delay_us(u32 nus)
{       u32 temp;            SysTick->LOAD=nus*fac_us;                               SysTick->VAL=0x00;                         SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; SysTick->VAL =0X00;
}
void delay_ms(u16 nms)
{                 u32 temp;        SysTick->LOAD=(u32)nms*fac_ms;               SysTick->VAL =0x00;                         SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;     do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));       SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;   SysTick->VAL =0X00;
}
#endif

delay.h

#ifndef __DELAY_H
#define __DELAY_H
#include "sys.h"  void delay_init(void);
void delay_ms(u16 nms);
void delay_us(u32 nus);#endif

4.编译生成HEX文件

5.电路搭建

搭建的电路图如下:

6.用串口下载程序

实验用到的STM32 开发板的,USB 转串口的驱动芯片是 CH340,所以要先在电脑中安装 USB 转串口驱动CH340 版本可以在右击此电脑->管理->设备管理器,查看是否成功

打开FlyMcu

注意

1.搜索串口,设置波特率 115200(尽量不要设置的太高)
2.选择校验、编程后执行

3.选择生成hex
4.DTR 低电平复位,RTS 高电平进入 bootloader

5.开始编程

7.实验结果

总结:通过这次试验我学会了做STM32F103C8芯片流水灯

参考文献:(7条消息) stm32f103c8t6工程模板的建立_你努力的样子,优秀至极-CSDN博客_stm32f103c8t6工程模板

(5条消息) STM32F103寄存器方式点亮LED流水灯_爱吃丫的博客-CSDN博客

用STM32F103C8芯片做流水灯相关推荐

  1. 8盏流水灯反向闪烁c语言,课程设计(论文)_利用8255A芯片实现流水灯闪烁设计.doc...

    课程设计(论文)_利用8255A芯片实现流水灯闪烁设计 利用8255A芯片实现流水灯闪烁设计 27 - 目录 摘要··········································· ...

  2. 灵动微电子MM32L0系列芯片做呼吸灯功能

    呼吸灯就是指电子产品上的LED灯的亮度随着时间由暗到亮逐渐增强,再由亮到暗逐渐衰减,有节奏感地一起一伏,就像是在呼吸一样,因而被广泛应用于手机.电脑等电子设备的指示灯中.在使用MCU开发相关的应用产品 ...

  3. 微型计算机知识做流水灯,微机原理流水灯的设计.doc

    微机原理流水灯的设计 微机原理课程设计报告书 课题名称流水彩灯的设计姓 名学 号 院.系.部物理与电信工程系专 业电子信息工程指导教师 2010年 7 月9日 一.设计任务及要求1.编写程序,使用82 ...

  4. 【Keil5 C51】AT89C52 做流水灯实验(调用C51的库函数_crol_)

    _crol_ 函数的介绍 Cx51 User's Guide Summary #include <intrins.h>unsigned char _crol_ (unsigned char ...

  5. 关于intrins.h头文件的介绍,做流水灯时候更方便

    先来个示例..循环左移..体现在开发板上是流水灯(从左到右) #include <reg52.h> #include<intrins.h> #define uchar unsi ...

  6. 2.STC89C52RC芯片之流水灯程序

    这里编程软件使用keil 4和程序下载软件ISP. 程序下载需冷启动和转换为hex文件 流水灯效果图 YL-39开发板 #include <REGX52.H> /*头文件*/ #inclu ...

  7. pynq-z2 使用PL做流水灯

    一 实验目标 轮流点亮开发板下面的4颗LED灯 二 实验步骤 启动Vivado,点击创建一个新工程,工程名为turn_led 选择RTL工程 选择开发板Boards,在其中选择PYNQ-Z2 点击Ad ...

  8. plc的移位指令C语言实现,移位指令做流水灯-PLC中使用移位指令是如何实现移位动作的-电气资讯 - 电工屋...

    移位指令的详述 一般格式 移位操作符(如SHR) OPR,CNT. 其中OPR用除立即数外的任何寻址方式.移位次数由CNT决定,在8086中可以是1或CL,CNT为1时只移一位:如果需要移位的次数大于 ...

  9. 80c51流水灯汇编语言,单片机AT89C51可控流水灯课程设计报告(汇编语言).docx

    单片机AT89C51可控流水灯课程设计报告(汇编语言).docx 目录目录1第一章 课题的意义及应用2第二章 系统的总体设计32.1 设计方法32.2 数码管显示方案32.3 键盘输入方案4第三章 硬 ...

  10. 51单片机LED流水灯、走马灯的实现

    目录 1. 硬件设计 2. 软件设计 流水灯: 跑马灯: 1. 硬件设计 流水灯的原理: 图中主要包括51单片机芯片和流水灯模块,流水灯模块接在了单片机的P2口,500欧电阻是用来保护电路的.由原理图 ...

最新文章

  1. 【组合数学】组合恒等式 ( 变上项求和 1 组合恒等式 | 三种组合恒等式证明方法总结 | 证明变上项求和 1 组合恒等式 )
  2. python包介绍:numpy
  3. gem ransack(4000✨) 简单介绍
  4. open,write,read与fopen,fwrite,fread的区别
  5. sqlserver随机取记录
  6. LeetCode(637)——二叉树的层平均值(JavaScript)
  7. 网络蛋白质组学在计算机中应用,Mumford Shah算法研究及其在拓扑蛋白质组学中的应用...
  8. lidar与相机联合标定开源软件介绍
  9. 机器学习笔记(二十):逻辑回归(2)
  10. LCM模组的简介与质量管理(连载四)
  11. messagedigest 图片加密_MessageDigest对密码进行加密
  12. 操作系统的几种基本类型
  13. Ubuntu下使用“Windows徽标键+R”打开终端
  14. 苹果弃用 3D Touch!
  15. 类和对象:类与对象定义
  16. 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总
  17. MySQL8.0地理空间数据库的QGIS应用浅析
  18. 08 基础代谢率计算
  19. Xshell的快捷键(非常实用)
  20. 有没有这样一个冷笑话,突然把你萌翻了~~~

热门文章

  1. 批量导出Outlook所有联系人到vcard文件
  2. 魔兽是用Python开发的,一起看看Python开发的知名网站和游戏!
  3. 将自己的app加入到分享列表中,并适配锤子的one step功能
  4. ubuntu10.10下smbd服务配置——实现主机WinXP与虚拟机Ubuntu10.10共享
  5. 葫芦娃系列棋牌服务器在哪里,葫芦娃—【关服】葫芦娃关服公告
  6. 安卓集成facebook_设计和编码集成的Facebook应用程序:理论
  7. 保险精算笔记Chapter02
  8. 快速学习-Ballot -- 一个简单的投票合约
  9. MiniGUI源码分析——GDI概览及Surface
  10. 初探摩根大通的企业级以太坊区块链解决方案—Quorum