0%

stm32_note_04day

============================
2022-8-18
============================

一.温故知新

    1.通过讲硬件的手册了解芯片内部结构
        CPU使用的是ARM-CORTEX-M3的核心,主频是72MHz
        CPU是通过三总线(数据 地址 控制)来访问外设的
        在STM32中AHB AHB1 AHB2都是三总线叫做高速总线
        在STM32中APB1 APB2也是三总线叫做外设总线
        芯片的管脚是多功能复用型的管脚
    2.GPIO的输出
        驱动LED灯
        选择了操作外设的寄存器的开发方式(需要使用C语言的位运算符)
        寄存器的真实地址 = 基地址 + 偏移地址
        *(volatile unsigned int *)(0x40011000 + 0x0C)
        举一反三
        驱动蜂鸣器
        BEEP	PC7
        管脚输出高电平,蜂鸣器响
        管脚输出低电平,蜂鸣器不响

二.GPIO的输入

    输入功能相当于检测,输出功能相当于控制
    输入功能分为
    上拉输入	管脚在没有外设操作的情况下,默认呈现的是高电平的状态
            对于低电平有触发效果
    下拉输入	管脚在没有外设操作的情况下,默认呈现的是低电平的状态
            对于高电平有触发效果
    浮空输入	管脚在没有外设操作的情况下,默认呈现的既不是高也不是低
            会对于外界的影响而变化
        (当在操作串口外设功能时会用到浮空输入)
    驱动开发板上的功能按键
    1.查看开发板原理图
        KEY0	PC9	上拉输入
        KEY1	PC8	上拉输入
        KEY2	PA0	下拉输入
        KEY0 KEY1在没有按下时应当检测到高电平,按下应当检测到低电平
        KEY2在没有按下时应当检测到低电平,按下应当检测到高电平
    2.查看芯片的手册
    #define GPIOC_IDR *(volatile unsigned int *)(GPIOC_BASE + 0x08)
    如何读取第9位的电平高低?
    ret = (GPIOC_IDR >> 9) & 0x01;
    3.写功能按键的驱动程序
    ST的官方固件大部分的参数都是按照位图来定义的
    以位图的形式定义
    GPIOA	0x0001	0001
    GPIOB	0x0002	0010
    GPIOC	0x0004	0100
    GPIOD	0x0008	1000
    GPIOA | GPIOB = 0011
    不是以位图的形式定义
    GPIOA	0x0001	0001
    GPIOB	0x0002	0010
    GPIOC	0x0003	0011
    GPIOD	0x0004	0100
    GPIOA | GPIOB = 0011

三.换一种开发方式

    需要调用ST公司的官方固件
    手册是辅助大家开发的,千万不要本末倒置

四.演示未来的开发方式

    STM32CUBEMX + Keil

===============================
作业
1.把今天讲过的内容完整的复习一遍
2.把<01test>项目工程拷贝一份,用LIB库实现LED灯、蜂鸣器、功能按键
3.完成需求
    通过3个功能按键,控制3个LED灯(开关)
    当按下抬起KEY0,LED0常亮,当再一次按下抬起KEY0,LED0常灭
    当按下抬起KEY1,LED1常亮,当再一次按下抬起KEY1,LED1常灭
    当按下抬起KEY2,LED2常亮,当再一次按下抬起KEY2,LED2常灭
===============================