嵌入式学习之stm32

1、首先我们先认识一下ROM和RAM以及一些其他常见的

二、stm32介绍

        1、ARM的介绍

ARM架构,是一个精简指令集(RISC)处理器架构家族,其广泛地使用在许多 嵌入式系统设计 ARM的经营模式在于出售其IP核,授权厂家依照设计制作出建构于此核的微控制 器和中央处理器。

        2、stm32的介绍stm32F103C8T6

ST:指意法半导体

M:指定微处理器32:表示计算机处理器位数

ARM分成三个系列:

Cortex-A:针对多媒体应用

Cortex-R:针对对实时性和性能有一定要求的场景

Cortex-M:针对低功耗高性能的场景 Cortex-M0、Cortex-M3、Cortex-M4广泛应用于智能手环、飞行器、平衡车、POST机、智能家电、3D打印机、工农业等各个领域,完成终端控制、边缘计算等任务,是大数据背景下信息和流量的入口。

不同场景应用具体可以参考产品选型手册:《STM8和STM32产品选型手册》

        3、stm32最小系统

stm32芯片型号:stm32f103c8t6 最小系统有5部分组成(电源电路、时钟电路、boot电路、下载/调试接口、复位电路)

三、GPIO的使用流程

1、使能GPIO时钟API

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)

功能:使能APB1或APB2的外设时钟。

参数:RCC_APB2Periph支持的外设:

RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, 
RCC_APB2Periph_GPIOE,RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,RCC_APB2Periph_ADC2, 
RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, 
RCC_APB2Periph_TIM11

NewState设置是否使能

ENABLE or DISABLE

2、初始化GPIO

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

功能:

主要完成:操作引脚、输入输出模式、速率的设置

参数:

GPIOx:操作的GPIO组,其中x为(A,B...G)比如GPIOA、GPIOB、GPIOC等

GPIO_InitStruct:GPIO初始化结构体指针

typedef struct{
    uint16_t GPIO_Pin;//GPIO_Pin的值为:GPIO_Pin_0~GPIO_Pin_15 或则GPIO_Pin_All
    GPIOSpeed_TypeDef GPIO_Speed;//GPIO_Speed_10MHz = 1,GPIO_Speed_2MHz,GPIO_Speed_50MHz
    GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;

3、设置电平

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置1
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置0

四、一个简单的点亮LED灯的案例

#include "stm32f10x.h"
void led_init(void);
void led_on(void);
void led_off(void);
void my_delay(int ms);
int main()
{
    led_init();
    
    while(1)
    {
        //亮
        led_on();
        //延时
        my_delay(500);
        //灭
        led_off();
        //延时
        my_delay(500); 
        
    }
    
    return 0;
}

void led_init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    //1、设置时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    
    //2、初始化GPIO PC13 输出
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//速率
    
    GPIO_Init(GPIOC,&GPIO_InitStruct);
    
    //3、设置电平 高电平灭
    GPIO_SetBits(GPIOC,GPIO_Pin_13);//置1
    
    return;
}

void led_on(void)
{
    GPIO_ResetBits(GPIOC, GPIO_Pin_13);//低电平 亮
    return;
}

void led_off(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_13);//高电平 灭
    return;
}

void my_delay(int ms)
{
    int i,j;
    for(i=0;i<ms;i++)
        for(j=0;j<1000;j++);
    return;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值