目录

一.STM32F103C8T6简介

1.定义

2.各字段定义

二.GPIO端口初始化设置

1.时钟设置

2.输入输出和输出速率设置

三.代码实现

1.c语言实现

2.烧录

3.烧录结果

四、STM32CubeMX生成代码使用HAL库点亮流水灯

1.安装HAL库

​编辑​2.keil仿真调试

3观察GPIO端口的输出波形

4.电路连接

5.实物图

5.烧录

6.运行效果

五.参考资料


一.STM32F103C8T6简介

1.定义

STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。

2.各字段定义

STM32(芯片系列):STM32代表ARM Cortex-M 内核的32位微控制器
103(芯片子系列):101基本型,102USB基本型(USB2.0),103代表增强型系列,105或107互联型
F(产品类型):F代表通用系列
C(引脚数量):T=36, C=48, R=64, V=100 , Z =144
8(闪存容量):4=16K,6=32K,8=64K,B=128K,C=256K,D=384K,E=512K
T(表封装):
H代表BGA封装
T代表LQFP封装
U代表VFQFPN封装
Y代表WLCSP64
6(工作温度范围):6代表-40 — 85℃,7代表-40 —105℃

二.GPIO端口初始化设置

要求分别在GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒

因为本次实验采用GPIOA、B、C三个端口。该三个端口都属于APB2总线所以可以使用STM32中文参考手册进行查询,这里给出下载地址

百度网盘 请输入提取码

提取码:uwi5

1.时钟设置

1.找到时钟使能寄存器映射基地址,如图复位和时钟控制(RCC)地址0x4002 1000 - 0x4002 13FF

2.找到端口偏移地址以及对应端口所在位置

3.使其能对应端口时钟

//----------------APB2使能时钟寄存器 ---------------------
#define RCC_APB2ENR     *((unsigned volatile int*)0x40021018)RCC_APB2ENR|=1<<2|1<<3|1<<4;            //APB2-GPIOA、GPIOB、GPIOC外设时钟使能

2.输入输出和输出速率设置

本次实验采用通用推挽输出模式,最高输出时钟频率2Mhz。分别用到A4、B5、C14三个引脚。其中A4、B5属于端口配置低寄存器偏移地址为0x00,C13属于端口配置高寄存器偏移地址为0x04。

通过查询找到GPIOx端口基地址

配置对应引脚寄存器,基地址+偏移量

//----------------GPIOA配置寄存器 -----------------------
#define GPIOA_CRL       *((unsigned volatile int*)0x40010800)
//----------------GPIOB配置寄存器 -----------------------
#define GPIOB_CRL       *((unsigned volatile int*)0x40010C00)
//----------------GPIOC配置寄存器 -----------------------
#define GPIOC_CRH       *((unsigned volatile int*)0x40011004)

三.代码实现

3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。

可以用1表示灯亮,0表示灯灭,初始状态灯全灭为000,然后依次亮灯状态一为100,

状态二为010,状态三为001,然后回归为状态一。

1.c语言实现

打开keil软件,创建工程,选择对应的控制器

控制器配置如下

将驱动文件添加到主程序文件夹

编译代码

//--------------APB2???????------------------------
#define RCC_AP2ENR  *((unsigned volatile int*)0x40021018)//----------------GPIOA????? ------------------------
#define GPIOA_CRL   *((unsigned volatile int*)0x40010800)
#define GPIOA_ORD   *((unsigned volatile int*)0x4001080C)
//----------------GPIOB????? ------------------------
#define GPIOB_CRH   *((unsigned volatile int*)0x40010C04)
#define GPIOB_ORD   *((unsigned volatile int*)0x40010C0C)
//----------------GPIOC????? ------------------------
#define GPIOC_CRH   *((unsigned volatile int*)0x40011004)
#define GPIOC_ORD   *((unsigned volatile int*)0x4001100C)
//-------------------???????-----------------------
void  Delay_wxc( volatile  unsigned  int  t)
{unsigned  int  i;while(t--)for (i=0;i<800;i++);
}
//------------------------???--------------------------
int main()
{int j=100;RCC_AP2ENR|=1<<2;            //APB2-GPIOA??????RCC_AP2ENR|=1<<3;          //APB2-GPIOB??????  RCC_AP2ENR|=1<<4;            //APB2-GPIOC??????//????????? RCC_APB2ENR|=1<<3|1<<4;GPIOA_CRL&=0x0FFFFFFF;       //??? ??    GPIOA_CRL|=0x20000000;     //PA7????GPIOA_ORD|=1<<7;            //???????GPIOB_CRH&=0xFFFFFF0F;        //??? ??    GPIOB_CRH|=0x00000020;     //PB9????GPIOB_ORD|=1<<9;            //???????GPIOC_CRH&=0x0FFFFFFF;        //??? ??GPIOC_CRH|=0x30000000;     //PC15????GPIOC_ORD|=0x1<<15;            //???????   while(j){   GPIOA_ORD=0x0<<0;        //PB0???    Delay_wxc(1000000);GPIOA_ORD=0x1<<0;     //PB0???Delay_wxc(1000000);GPIOB_ORD=0x0<<9;     //PB9???    Delay_wxc(1000000);GPIOB_ORD=0x1<<9;     //PB9???Delay_wxc(1000000);GPIOC_ORD=0x0<<15;        //PC15???   Delay_wxc(1000000);GPIOC_ORD=0x1<<15;        //PC15???Delay_wxc(1000000);}
}

2.烧录

将生成的hex文件进行烧录

3.烧录结果

四、STM32CubeMX生成代码使用HAL库点亮流水灯

请自行安装好STM32CubeMX

1.安装HAL库

打开安装好的STMCubeMX,创建新项目,在part name里选择自己的芯片

点击system core,进入SYS,在debug下选择serial wire

​配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里

​ 接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上

​将hse那里设为Crystal/Ceramic Resonator

接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA4,PB9,PC15

​点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM

​2.keil仿真调试

打开.uvprojx文件(或者在上一步选择open project)打开main.c文件,滑倒主函数那一部分

将下面代码放入主函数中(替代里面的内容)

SystemClock_Config();//系统时钟初始化MX_GPIO_Init();//gpio初始化while (1){       HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯HAL_Delay(1000);//延时1sHAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯HAL_Delay(1000);//延时1s        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯HAL_Delay(1000);//延时1s}

3观察GPIO端口的输出波形

Debug页的设置

点击Debug,进入调试界面选择逻辑分析仪

选择要观察的引脚:
点击Setup Logic Analyzer

相关设置

运行程序

观察波形

引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1s左右。

4.电路连接

根据设计的程序连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9

总电路:
红——B9
绿——C15
黄——A4

5.实物图

5.烧录

6.运行效果

五.参考资料

stm32寄存器实现流水灯

STM32F103C8T6实现流水灯

stm32cubeMX使用HAL库点亮LED流水灯

嵌入式作业STM32F103C8T6和stm32CubeMX实现LED灯相关推荐

  1. 【嵌入式系统开发09】重做LED灯以及串口通信查询

    [嵌入式系统开发09]重做LED灯以及串口通信查询 要求:安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务: 1.LED灯重 ...

  2. 嵌入式开发学习之--点亮LED灯(上)

    在嵌入式学习里,点亮LED灯的地位就如同编程语言学习里的"hello world",是每个初学者都必须经历的一关,因为点亮了LED灯,至少可以说明几件事: 1.开发环境没问题,包括 ...

  3. 嵌入式开发学习之--点亮LED灯(中)

    上篇我们主要学习的是环境搭建和实际操作,这篇详细记录一下整个思考的过程. 首先,我们需要想一个问题,这个灯为什么会亮? 物理上来说,LED灯属于发光二极管,只要有正确的电压就会发亮.也就是说,我们烧写 ...

  4. 嵌入式系统开发设计——按键控制LED灯实现

    一.实验目的 掌握STM32固件库的使用方法: 掌握基于库函数模板的开发方法: 掌握基于固件库进行GPIO端口编程的方法: 4.规范编程格式. 二.实验内容 1.查阅STM32-V5开发板按键.LED ...

  5. 【嵌入式系统开发】Keil 实现LED灯闪烁 详细教程及完整代码

  6. 起航,第一个程序——还是LED灯

    如同学基本语言一样,helloworld是很多语言的第一个程序.在嵌入式开发中,点亮LED灯也是各种架构和开发板的第一个程序,其中很多东西是和单片机例如stm32是类似的,只是,现在我们没有了库函数, ...

  7. 嵌入式作业STM32定时器实现串口通信及LED灯闪烁

    目录 前言 一.什么是定时器 1.定时器与计数器 2. 定时器有什么用 3. 定时器的原理 4.时钟产生器和时基单元 二.用STM32CubeMx创建项目 1. 创建项目 2.配置RCC和SYS 3. ...

  8. 【嵌入式系统基础实验一】-----led流水灯及串口通信的HAL库方式和寄存器编程方式实现,输出波形检测

    文章目录 1.实验知识点简要解析 1.1串口通信协议 1.2 RS232.485电平与TTL电平的区别 1.3 USB/TTL转232"模块 2.LED流水灯的寄存器地址 和HAL库这两种方 ...

  9. 嵌入式小白学习:STM32实现定时器控制LED灯

    嵌入式小白学习:STM32实现定时器控制LED 目录 嵌入式小白学习:STM32实现定时器控制LED Part1.理论基础 Part2.环境的配置 Part3.代码的更改 Part4.实物的连线 Pa ...

最新文章

  1. Android 热修复总结
  2. 我的百度研发面经整合版(智能云,核心搜索) | 掘金技术征文
  3. 【张其中】中本聪,我们究竟需要怎样的加密货币?
  4. antdesign 表单中的单选按钮处理
  5. 2021年石家庄七中高考成绩查询入口,石家庄市教育考试院官网2020中考查分:成绩查询入口...
  6. 配置环境_python虚拟环境的搭建
  7. 如何设置myeclipse的编码格式
  8. tomcat中三种部署项目的方法(转)
  9. linux驱动怎么判断定时器正在运行,Linux设备驱动编程之定时器
  10. 前端安全XSS,CSRF
  11. 可执行MIPS指令的单周期CPU
  12. 通信原理学习笔记6-1:数字解调——基础解调链路、匹配滤波器和AWGN信道最佳接收机
  13. java ip138_判读ip所在地(通过百度ip138的提供的服务) java实现
  14. Python+Opencv中的轮廓の(01)cv2.findContours检索图像的轮廓
  15. 零知识证明之zk-snark 应用案例(零知识证明实战渔业监控【zksnark】)
  16. php如何把乘法口诀表嵌入表格中,php编辑表格生成器,for循环编写乘法口诀
  17. threejs examples 学习
  18. MySQL的各种安装方式都给你
  19. Pyside2安装与基础操作
  20. PB使用http协议、https协议(简单便捷)

热门文章

  1. 微信公众平台开发(PHP)(二) 微信公众平台示例代码分析
  2. Python实现MATLAB bi2de函数
  3. GB28181语音对讲/摄像头公网对讲指挥
  4. 鼎铛有耳 智能硬件供应链新一代“网红”诞生 ——第三届HCFT智能硬件供应链大会品牌盛会颁奖典礼在深成功举办...
  5. jenkins+Xcode+蒲公英实现ipa自动打包发布全攻略
  6. 流量不清零:还在忽悠广大网民?
  7. JIRA实践系列-JIRA与teambition对接指南
  8. codevs 2806 红与黑
  9. springboot整合jett实现模板excel数据导出
  10. 罗永浩又双叒叕diss苹果了