• STM点滴一


    就就是你用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险。也就不需要关闭中断。

    This way, there is no risk that an IRQ occurs between the read and the modify access.”

    用ODR操作GPIO的伪代码如下:

        disable_irq()

    save_gpio_pin_sate = read_gpio_pin_state();

    save_gpio_pin_sate = xxxx;

    chang_gpio_pin_state(save_gpio_pin_sate);

    enable_irq();

    关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好还是用SBRR和BRR

    对于问题 2 ------- 个人经验判断意法半导体仅仅是为了程序员操作方便估计做么做的。

                              因为SBRR的 低 16bsts 恰好是set操作,而高16bit是 reset 操作

                             而BRR 低 16bits 是reset 操作

    用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态.

    ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。管脚对于位写1 gpio 管脚为高电平,写 0 为低电平

    BSRR 只写寄存器:既能控制管脚为高电平,也能控制管脚为低电平。对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。写 0 ,无动作

    BRR 只写寄存器:只能改变管脚状态为低电平,对寄存器 管脚对于位写 1 相应管脚会为低电平。写 0 无动作。

    =========================================================================

    PIOx_CRL/GPIOx_CRH (x:A~F)寄存器用来对GPIO进行端口设置,如:设置GPIO为输入模式或输出模式。每个寄存器含有32位,每4位用来设置1个GPIO引脚功能。GPIOx_CRL/GPIOx_CRH 两个寄存器共含有64位,因此可完成对GPIO0~15的设定。其中GPIOx_CRL用于设置GPIO0~7引脚,GPIOx_CRH用于设置GPIO8~15引脚。

    例如设置PB11引脚为开漏输出模式,输出频率为10MHz:

    步骤:

    1. 因PB11属于GPIO8~15之间,所以,需通过GPIOB_CRH寄存器才能实现对PB11的设置。
    2. 因GPIOB_CRH寄存器中每4位决定一个GPIO工作模式,所以,需通过设置GPIOB_CRH的第12~15位。
    3. 因PB11引脚“输出模式”,从图中②可以看出须把GPIOB_CRH寄存器的MODE11[1:0]设置为01。
    4. 根据MODE[1:0]的值为01可知,CNF11[1:0]需要选择“在输出模式(MODE[1:0]>00)”中选择需要设置的值。
    5. 因PB11须设置为“通用开漏模式”,故CNF11[1:0]需设置为01。
    6. 最终设置指令为:

    GPIOB->CRH&=0XFFFF0FFF;  //清除GPIOB->CRH的第12~15位。

    GPIOB->CRH|=3<<12; //设置GPIOB->CRH的第12~15位为0101(10MHz开漏输出模式)。

    如图是一张stm32的内存映射图,其中代码区是从0x0800 0000开始的,他的结束地址是0x0800 0000加上实际芯片的flash大小,他的ram的起始地址是0x2000 0000,然后结束地址依然是加上芯片实际的ram大小。

    数据手册F103x8B上的图为:

  • 相关阅读:
    Arch Linux中安装Anaconda
    Windows下使用Diskpart格式化U盘
    Jupyter Notebook的安装
    Docker的脚本安装
    pip无法正常使用卸载并重新安装
    Arch更新时failed to prepare transaction
    Privoxy将Socks代理转化HTTP代理
    Arch Linux下Visual Stdio Code在格式化C代码时报错
    GNOME 3.28 启用桌面图标
    Appium入门(8)__控件定位
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007451.html
Copyright © 2020-2023  润新知