当前位置: 首页 > news >正文

STM32f103c6t6/STM32f103c8t6寄存器开发

目录

资料

寻址区

2区 

TIMx

RTC

 WWDG IWDG

 SPI I2S

 USART

 I2C

 USB全速设备寄存器

bxCAN

BKP

 PWR

 DAC

ADC

​编辑

EXTI

​编辑

 GPIO AFIO

 SDIO

DMA

 CRC

RCC 

 FSMC

USB_OTG 

ETH(以太网)

7区

配置流程

外部中断

硬件中断

例子

点灯

闪烁led

流水灯

键控led


资料

STM32F10x-中文参考手册

Cortex M3指南

stm32内核寄存器

寻址区

2区 

TIMx

RTC

 WWDG IWDG

 SPI I2S

 USART

 I2C

 USB全速设备寄存器

bxCAN

BKP

 PWR

 DAC

ADC

EXTI

 GPIO AFIO

 

 SDIO

DMA

 CRC

RCC 

 FSMC

USB_OTG 

待定

ETH(以太网)

7区

 

配置流程

外部中断

硬件中断

1.配置RCC_APB2ENR,使能GPIOx,AFIO

2.配置GPIOx_CRL/GPIOx_CRH,选择输入上拉或下拉模式和端口速度

3.配置EXTI_IMR,选择开放某条线上的中断请求

4.配置AFIO_EVCR,选择中断的触发引脚

5.配置AFIO_EXTICRx,根据中断引脚和EXTIx线进行配置

6.配置EXTI_RTSR/EXTI_FTSR,选择上升沿或下降沿触发

7.配置SCB_AIRCR,选择中断分组

8.配置PRI_x中断优先级寄存器阵列,根据中断号,中断分组和需要配置排队优先级与抢占优先级

9.配置SETENA寄存器族,根据中断号使能外部中断

10.读取 ACTIVE寄存器族,查看中断标志位

Cortex M3内核最多支持240个中断通道,但是STMF103C8T6/C6T6只设计了60个可屏蔽的中断通道。60个中断通道与它们在240个中断通道里的中断号是一样的。

用图表示必要流程:

例子

点灯

GPIO13低电平点亮led

#include<stdio.h>
int main(void){
//配置GPIOC时钟
*(unsigned *) 0x40021018 |= (1<<4);
//配置GPIOC为推挽模式输出
*(unsigned *) 0x40011004 &= ~(0xf<<20);
*(unsigned *) 0x40011004 |= (1<<21);}

1.使能GPIOC RCC时钟(配置RCC_APB2ENR        RCC_APB2使能寄存器)

2.配置GPIOC13为推挽输出模式(配置GPIOC_CRH        GPIOC端口高位寄存器)

闪烁led

GPIO13低电平点亮led

#include<stdio.h>
int main(void){int i;*(unsigned *) 0x40021012 |= (1<<4);*(unsigned *) 0x40011004 &= ~(0xF<<20);*(unsigned *) 0x40011004 |= (1<<21);while(1){for(i=0;i<0xfffff;i++);*(unsigned *) 0x4001100c = ~(*(unsigned *) 0x4001100c);}
}

1.使能GPIOC RCC时钟(配置RCC_APB2ENR        RCC_APB2使能寄存器)

2.配置GPIOC13为推挽输出模式(配置GPIOC_CRH        GPIOC端口高位寄存器)

3.配置GPIOC13输出电平(配置GPIOC_ODR         GPIOC端口输出数据寄存器)

完成配置步骤1、2,通过不断改变 GPIOC端口输出数据寄存器 的配置实现led的亮灭

流水灯

B3,B4,B5高电平点亮三个led

#include<stdio.h>
int main(void){int i;//配置GPIOB时钟*(unsigned *) 0x40021018 |= (1<<3);//初始化GPIOB3,GPIOB4,GPIOB5*(unsigned *) 0x40010c00 &= ~(0xFFF000);*(unsigned *) 0x40010c00 |= (0x222<<12);while(1){*(unsigned *) 0x40010c0c &= 0;*(unsigned *) 0x40010c0c |= (1<<3);for(i=0;i<0xfffff;i++);*(unsigned *) 0x40010c0c &= 0;*(unsigned *) 0x40010c0c |= (1<<4);for(i=0;i<0xfffff;i++);*(unsigned *) 0x40010c0c &= 0;*(unsigned *) 0x40010c0c |= (1<<5);for(i=0;i<0xfffff;i++);}
}

1.使能GPIOB RCC时钟(配置RCC_APB2ENR        RCC_APB2使能寄存器)

2.配置B3,B4,B5为推挽输出模式(配置GPIOB_CRL        GPIOB端口低位寄存器)

3.配置B3,B4,B5的输出电平(配置GPIOB_ODR         GPIOB端口输出数据寄存器)

完成配置步骤1、2,通过延时,改变 GPIOB端口输出数据寄存器 的配置实现led的轮流亮灭

键控led

#include<stdio.h>
int main(void){int i;//配置GPIOB,GPIOC的时钟*(unsigned *) 0x40021018 |= (3<<3);//初始化GPIOC*(unsigned *) 0x40011004 &= ~(0xf<<20);*(unsigned *) 0x40011004 |= (1<<21);//初始化GPIOB*(unsigned *) 0x40010c00 &= ~(0xf<<12);*(unsigned *) 0x40010c00 |= (8<<12);while(1){if((*(unsigned *) 0x40010c08 & (1<<3))==0){for(i=0;i<1000;i++)if((*(unsigned *) 0x40010c08 & (1<<3))==0){*(unsigned *) 0x4001100c = ~(*(unsigned *) 0x4001100c);}}}}

1.使能GPIOB,GPIOC RCC时钟(配置RCC_APB2ENR        RCC_APB2使能寄存器)

2.配置GPIOC为推挽输出模式(配置GPIOC_CRH        GPIOC端口高位寄存器)

3.配置PB3为上拉输入模式(配置GPIOB_CRL        GPIOB端口低位寄存器)

4.配置GPIOC13输出电平(配置GPIOC_ODR         GPIOC端口输出数据寄存器)

完成配置步骤1、2、3,通过判断GPIOB端口输出的是否为低电平,控制灯的亮灭

http://www.lryc.cn/news/135753.html

相关文章:

  • MySQL Connection not available.
  • PHP反序列化 字符串逃逸
  • DockerFile解析
  • 斯坦福大学医学院教授:几年内ChatGPT之类的AI将纳入日常医学实践
  • golang 命令行 command line (flag,os,arg,args)
  • Shell语法揭秘:深入探讨常见Linux Shell之间的语法转换
  • Python3 基础语法
  • spring boot分装通用的查询+分页接口
  • 【OpenCV】OpenCV环境搭建,Mac系统,C++开发环境
  • node安装node-sass依赖失败(版本不一致)
  • 联想小新Pro 16笔记本键盘失灵处理方法
  • python 连接Redis 数据库
  • 使用 wxPython 和 pymupdf进行 PDF 加密
  • Mysql性能优化:什么是索引下推?
  • Pytorch建立MyDataLoader过程详解
  • 十问华为云 Toolkit:开发插件如何提升云上开发效能
  • NO.06 自定义映射resultMap
  • 国产精品:讯飞星火最新大模型V2.0
  • 网络综合布线实训室方案(2023版)
  • Qt应用开发(基础篇)——文本编辑窗口 QTextEdit
  • NineData中标移动云数据库传输项目(2023)
  • Java面向对象三大特性之多态及综合练习
  • HTTPS 握手过程
  • docker之Consul环境的部署
  • 服务机器人,正走向星辰大海
  • SciencePub学术 | 计算机及交叉类重点SCIE征稿中
  • Java面试题--SpringCloud篇
  • 【linux】常用的互斥手段及实例简述
  • STM32 F103C8T6学习笔记12:红外遥控—红外解码-位带操作
  • linux 环境收集core文件步骤