STM32f103c6t6/STM32f103c8t6寄存器开发

本文详细介绍了STM32F10x系列微控制器中各种功能模块的配置,如TIMx、RTC、GPIO、中断管理等,并通过实例演示了如何使用GPIO控制LED灯的点灯、闪烁和流水灯效果,以及涉及的中断配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

资料

寻址区

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区

 

配置流程

时钟树配置

本质:操作RCC寄存器

//禁用所有中断并清除挂起的位
  RCC->CIR = 0x009F0000;
//使能HSE
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
//启用预取缓冲区
  FLASH->ACR |= FLASH_ACR_PRFTBE;

//Flash 2等待状态
  FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
  FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    

//HCLK2分频,设置APB1为36MHz
  RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

//使能PLL
  RCC->CR |= RCC_CR_PLLON;

//选择PLL作为系统时钟源
  RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; 

外部中断

硬件中断

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端口输出的是否为低电平,控制灯的亮灭

### STM32F103C6T6 单片机概述 STM32F103C6T6 是一款基于 ARM Cortex-M3 内核的高性能微控制器,具有丰富的外设接口和强大的处理能力。该芯片拥有 48 MHz 的最大频率,内置 32 KB Flash 和 10 KB SRAM[^1]。 #### 主要特性 - **处理器核心**: ARM Cortex-M3 CPU,支持 Thumb-2 指令集扩展。 - **存储器配置**: - 程序内存 (Flash): 32KB - 数据/指令 RAM: 10KB - **时钟源**: - 内部高速 RC振荡器(HSI), 频率范围为 8MHz ±1% - 外部高速晶振(XTAL) 支持最高至 25MHz 输入信号 - **低功耗模式** - Sleep Mode, Stop Mode 及 Standby Mode 提供多种省电选项 - **通信接口** - USARTs(最多可达5个),I²Cs,SPIs,CAN 接口等串行总线协议的支持 - **定时计数功能** - 基本定时器(Basic Timer) - 通用定时器(General Purpose Timers) ```cpp // 定义 LED 控制函数 void Toggle_LED(void){ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); } // 设置 TIM1 中断回调函数用于控制 LED 闪烁 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim->Instance == TIM1){ Toggle_LED(); } } ``` 此代码片段展示了如何利用定时器中断来实现简单的 LED 闪烁效果[^3]。 对于遇到的问题——即使用 C6 替代 C8 后部分硬件不工作的现象分析如下: 尽管两者同属 F1 系列并共享相似架构,但在实际应用中仍存在细微差异可能导致兼容性问题。特别是关于 PWM 输出方面,在某些特定型号间可能存在不同之处。例如 PB6 引脚未能按预期发出 PWM 波形可能是由于寄存器设置不当或是所选定时器通道不对等原因引起[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值