用stm32 的配置gpio 来控制led 显示状态,可用odr,bsrr,brr 直接来控制引脚输出状态。
odr寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。
管脚对于位写1 gpio 管脚为高电平,写 0 为低电平
bsrr 只写寄存器:[color=red]既能控制管脚为高电平,也能控制管脚为低电平。
对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。写 0 ,无动作
brr 只写寄存器:只能改变管脚状态为低电平,对寄存器 管脚对于位写 1 相应管脚会为低电平。写 0 无动作。
刚开始或许你跟我一样有以下疑惑:
1.既然odr 能控制管脚高低电平为什么还需要bsrr和srr寄存器?
2.既然bsrr能实现brr的全部功能,为什么还需要srr寄存器?
对于问题 1 ------ 意法半导体给的答案是---
“this way, there is no risk that an irq occurs between the read and the modify access.”
什么意思呢?就就是你用bsrr和brr去改变管脚状态的时候,没有被中断打断的风险。也就不需要关闭中断。
用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 ------- 个人经验判断意法半导体仅仅是为了程序员操作方便估计做么做的。
因为bsrr的 低 16bsts 恰好是set操作,而高16bit是 reset 操作 而brr 低 16bits 是reset 操作。
简单地说gpiox_bsrr的高16位称作清除寄存器,而gpiox_bsrr的低16位称作设置寄存器。
另一个寄存器gpiox_brr只有低16位有效,与gpiox_bsrr的高16位具有相同功能。
举个例子说明如何使用这两个寄存器和所体现的优势。
例如gpioe的16个io都被设置成输出,而每次操作仅需要
改变低8位的数据而保持高8位不变,假设新的8位数据在变量newdata中,
这个要求可以通过操作这两个寄存器实现,stm32的固件库中有两个函数
gpio_setbits()和gpio_resetbits()使用了这两个寄存器操作端口。
上述要求可以这样实现:
gpio_setbits(gpioe, newdata & 0xff);
gpio_resetbits(gpioe, (~newdata & 0xff));
也可以直接操作这两个寄存器:
gpioe-》bsrr = newdata & 0xff;
gpioe-》brr = ~newdata & 0xff;
当然还可以一次完成对8位的操作:
gpioe-》bsrr = (newdata & 0xff) | ( (~newdata & 0xff)《《16 );
当然还可以一次完成对16位的操作:
gpioe-》bsrr = (newdata & 0xffff) | ( (~newdata )《《16 );
从最后这个操作可以看出使用bsrr寄存器,可以实现8个端口位的同时修改操作。
有人问是否bsrr的高16位是多余的,请看下面这个例子:
假如你想在一个操作中对gpioe的位7置‘1’,位6置‘0’,则使用bsrr非常方便:
gpioe-》bsrr = 0x400080;
如果没有bsrr的高16位,则要分2次操作,结果造成位7和位6的变化不同步!
gpioe-》bsrr = 0x80;
gpioe-》brr = 0x40;
bsrr还有一个特点,就是set比reset的级别高,
就是说同一个bit又做set又做reset,最后结果是set
要同步变化只要简单的 gpiox-》bsrr = 0xffff0000 | patten;
即可,不用考虑哪些需要置1,哪些需要清零
从最后这个操作可以看出使用bsrr寄存器,可以实现8个端口位的同时修改操作。
雷曼智慧教室教育显示系统为师生提供更多样、更灵活的课堂协作方式
无线路由器的工作频段
信达物联携手海尔云裳衣联网 开启“物联网洗衣新模式”
互联网P2P的发展解读与短板揭露
云米科技2019全年财报发布:净利润2.9亿元,同比增长349.6%
怎样用STM32单片机的GPIO控制LED显示状态
高通重返国内市场 押宝5G毫米波通讯
来也科技RPA机器人,快速满足企业多种文档信息抽取需求
长城新品牌“欧拉”:很快就成了越逼越紧的新能源积分压力
中芯国际Q3净利1200万美元 环比涨69%
华为在打一场硬仗
创新引擎再发力 芯华章智能科技正式入驻临港新片区
歌尔声学或成为苹果新EMS厂商,有可能获得AirPods Pro组装订单
电源插座防雷保护方案
一款工业级物联网无线路由器-TR341系列工业级路由器
机构点评汇总:锰铁锂或成为电池主要材料
电容的连接方式与充放电原理
霍尼韦尔发布多款先进热能产品 绘制行业低氮发展新蓝图
智能环境监测,微智达提供水质在线监测系统专用工业计算机
OP07放大电路原理图_op07应用电路图盘点