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内核寄存器

寻址区

STM32f103c6t6/STM32f103c8t6寄存器开发_第1张图片

2区 

STM32f103c6t6/STM32f103c8t6寄存器开发_第2张图片

TIMx

STM32f103c6t6/STM32f103c8t6寄存器开发_第3张图片

RTC

STM32f103c6t6/STM32f103c8t6寄存器开发_第4张图片

 WWDG IWDG

STM32f103c6t6/STM32f103c8t6寄存器开发_第5张图片

 SPI I2S

STM32f103c6t6/STM32f103c8t6寄存器开发_第6张图片

 USART

STM32f103c6t6/STM32f103c8t6寄存器开发_第7张图片

 I2C

STM32f103c6t6/STM32f103c8t6寄存器开发_第8张图片

 USB全速设备寄存器

STM32f103c6t6/STM32f103c8t6寄存器开发_第9张图片

bxCAN

STM32f103c6t6/STM32f103c8t6寄存器开发_第10张图片

BKP

STM32f103c6t6/STM32f103c8t6寄存器开发_第11张图片

 PWR

STM32f103c6t6/STM32f103c8t6寄存器开发_第12张图片

 DAC

STM32f103c6t6/STM32f103c8t6寄存器开发_第13张图片

ADC

STM32f103c6t6/STM32f103c8t6寄存器开发_第14张图片

EXTI

STM32f103c6t6/STM32f103c8t6寄存器开发_第15张图片

 GPIO AFIO

 STM32f103c6t6/STM32f103c8t6寄存器开发_第16张图片

 SDIO

STM32f103c6t6/STM32f103c8t6寄存器开发_第17张图片

DMA

STM32f103c6t6/STM32f103c8t6寄存器开发_第18张图片

 CRC

STM32f103c6t6/STM32f103c8t6寄存器开发_第19张图片

RCC 

STM32f103c6t6/STM32f103c8t6寄存器开发_第20张图片

 FSMC

STM32f103c6t6/STM32f103c8t6寄存器开发_第21张图片

USB_OTG 

待定

ETH(以太网)

STM32f103c6t6/STM32f103c8t6寄存器开发_第22张图片

7区

STM32f103c6t6/STM32f103c8t6寄存器开发_第23张图片

 

配置流程

外部中断

硬件中断

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个中断通道里的中断号是一样的。

用图表示必要流程:

STM32f103c6t6/STM32f103c8t6寄存器开发_第24张图片

STM32f103c6t6/STM32f103c8t6寄存器开发_第25张图片

STM32f103c6t6/STM32f103c8t6寄存器开发_第26张图片

例子

点灯

GPIO13低电平点亮led

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

你可能感兴趣的:(stm32,mcu,嵌入式硬件,单片机)