历史上的今天
今天是:2024年09月22日(星期日)
2020年09月22日 | STM32中的位带(bit-band)操作
2020-09-22 来源:eefocus
//位带操作,实现51类似的GPIO控制功能
//具体实现思想,参考< //IO口操作宏定义 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射 #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08 //IO口操作,只对单一的IO口! //确保n的值小于16! #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出 #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入 #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出 #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入 #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出 #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入 #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出 #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入 #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出 #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入 #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出 #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入
上一篇:stm32时钟设置函数
下一篇:STM32F10x的启动代码分析
史海拾趣
|
// Provided by CodeVisionAVR to clear the SPI interrupt flag #asm in r30,spsr in r30,spdr #endasm 说是以保证SPI中断是空闲的,但我看不懂,在我看来只是将两个寄存器的内容放到r30里去了。 书上还说这是 ...… 查看全部问答> |
|
请问有谁了解TRACE32和OPENICE-A1000这2个仿真器的使用啊 手机的IMEI用这个2个仿真器能进行修改吧 请问有谁了解TRACE32和OPENICE-A1000这2个仿真器的使用啊 能够熟练的修改TRACE32的CMM脚本文件修改成支持其他FLASH读写 有熟悉的工程师吗 请联系我谢谢...可以站内PM我 发个Q 还有个问题 就是问一下手机的IMEI用这个2个仿真器能进行修改吧。。。 ...… 查看全部问答> |
|
经过一段时间的接触TI的开发板,发现TI芯片确实算是比较容易锁死的。我边上有人锁死过,网上也有一大票人锁死过,很幸运的是,今天我也荣幸的锁了一回,我是在调SDRAM时,因为直接load网上下载的代码,导致了芯片锁死,于是就开始了漫漫的寻找答案 ...… 查看全部问答> |
|
各位大虾,我使用普通的51单片机,有片外数据存储器用于存储一些参数,通过按键调整这些参数(显示用液晶12864),调整完毕后存到片外存储器中,要调整时再读出来。由于原液晶厂家不在了,我更换了一个厂家,更换后液晶显示没问题,但是不知道片外 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 我们做了一个仪器,验收时发现ESD有点问题。我们用万用表测仪器外壳(金属)与电源地之间电压,发现有20mV的电压。后来我们又发现,每拔掉一块PCB,仪器外壳的电压就会减少。拔掉PCB越多,电压 ...… 查看全部问答> |




