STM32f103c6t6/STM32f103c8t6寄存器开发

news/2024/11/16 14:37:05/

目录

资料

寻址区

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.ppmy.cn/news/1052884.html

相关文章

论文阅读:DIN-SQL: Decomposed In-Context Learning of Text-to-SQL withSelf-Correction

NL2SQL是将自然语言转化为SQL的任务&#xff0c;该任务隶属于NLP的子任务&#xff0c;NL2SQL在AIGC时代之前&#xff0c;以seq2seq、BERT等系列的模型在NL2SQL的主流数据集上取得了不错的效果&#xff0c;2022年底&#xff0c;ChatGPT爆火&#xff0c;凭借LLM强大的逻辑推理、上…

机器学习深度学习——NLP实战(自然语言推断——注意力机制实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——NLP实战&#xff08;自然语言推断——数据集&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…

Centos 解决 XXX不在 sudoers 文件中。此事将被报告。的错误

本来想使用 sudo 拷贝一个文件&#xff0c;结果出现上面的问题&#xff01; 下面是解决方法&#xff1a; 首先登录root&#xff0c;然后执行下面的命令 vim /etc/sudoers 将你需要添加的用户带红色框线的地方&#xff0c;模仿root写一遍&#xff0c;然后保存&#xff01; …

[保研/考研机试] KY196 复数集合 北京邮电大学复试上机题 C++实现

题目链接&#xff1a; 复数集合_牛客题霸_牛客网 一个复数&#xff08;xiy&#xff09;集合&#xff0c;两种操作作用在该集合上&#xff1a; 1、Pop 表示读出集。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692724009060 描述 一个复数&#xff08;…

【vue】el-table 数据更新后,刷新表格数据

表格里面的数据更新后&#xff0c;可以通过以下方法来刷新表格 方法1 用更新后的数据&#xff0c;覆盖之前的数据 var newTableData[];for(var i0;i<that.tableData.length;i){ if(aIdthat.selectStationId&&bIdthat.selectDeviceId){that.tableData[i].physica…

android 上拉固定高度显示,下拉关闭View BottomSheetDialog

具体代码 复制使用 1,新建一个BottomBaseStationDialogLayout.java类继承BottomSheetDialogFragment public class BottomBaseStationDialogLayout extends BottomSheetDialogFragment { public static BottomBaseStationDialogLayout getInstance() {return new BottomBase…

初步认识OSPF的大致内容(第三课)

1 路由的分类 直连路由&#xff08;Directly Connected Route&#xff09;是指网络拓扑结构中相邻两个网络设备直接相连的路由&#xff0c;也称为直接路由。如果两个设备属于同一IP网络地址&#xff0c;那么它们就是直连设备。直连路由表是指由计算机系统生成的一种用于路由选择…

mac指定node版本 mac node版本降级 mac切换node版本

本文解决问题&#xff1a; mac指定node版本 mac切换node版本 mac node版本降级 第一步 进行nvm 安装操作 brew install nvm 执行 nvm --version nvm --version 出现zsh: command not found: nvm问题去进行配置第二步 nvm配置 1.输入: vim ~/.bash_profile 点击 i 进行插入…