STM32 寄存器位操作

2019-07-14 23:33发布

STM32的寄存器是  32位的  然而 操作也只能是以 32位的形式操作,  小弟想 单独对某一位操做  应该怎么做呢  就像8位的单片机一样可以写作PTA_PTA1=1(表示A口pin1置1).  用结构体联合体的方式应该怎么做呢???  或者还有什么其他的办法。  谢谢各位。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
邪帝-无痕
1楼-- · 2019-07-16 07:42
可以对IO口进行位绑定
邪帝-无痕
2楼-- · 2019-07-16 08:02
#include "stm32f10x.h" #define GPIOA_ODR (GPIOA_BASE+0x0c)  //ODRµØÖ· #define GPIOA_IDR (GPIOA_BASE+0x08)  //IDRµØÖ· //¶ÔÓ¦IO¿ÚÒý½ÅÊäÈëÊä³öµØÖ· #define BitBand(Addr,BitNum)   *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2))) #define PAout(n)  BitBand(GPIOA_ODR,n)  //Êä³öº¯Êý #define PAin(n)   BitBand(GPIOA_IDR,n)  //ÊäÈ뺯Êý int main(void) {     GPIOA->CRL =0x33333333;          GPIOA->CRH =0x44444444;         while(1)         {                 if(PAin(8)==1) PAout(0)=1;                 else           PAout(0)=0;                 if(PAin(9)==1) PAout(1)=1;                 else           PAout(1)=0;                 if(PAin(10)==1) PAout(2)=1;                 else           PAout(2)=0;                 if(PAin(11)==1) PAout(3)=1;                 else           PAout(3)=0;                 if(PAin(12)==1) PAout(4)=1;                 else           PAout(4)=0;                 if(PAin(13)==1) PAout(5)=1;                 else           PAout(5)=0;                 if(PAin(14)==1) PAout(6)=1;                 else           PAout(6)=0;                 if(PAin(15)==1) PAout(7)=1;                 else           PAout(7)=0;   } }  
h1x2y3awalm
3楼-- · 2019-07-16 12:29
 精彩回答 2  元偷偷看……
explorer126
4楼-- · 2019-07-16 16:54
楼上的几位也没看懂啊。还是要学习。
zexianxu
5楼-- · 2019-07-16 22:30
{:14:}{:14:}{:14:}{:14:}
唯有风情
6楼-- · 2019-07-17 02:17
没错 用位绑定。 模板给你。供参考、使用。
#define GPIOA_ODR_A (GPIOA_BASE+0x0c)  //定义GPIOd的A端口寄存器 ODR和IDR
#define GPIOA_IDR_A (GPIOA_BASE+0x08)

#define BitBand(Addr,BitNum) *((volatile unsigned long *)(Addr&0xF0000000)+0x20000000+((Addr&0xfffff)<<5)+(BitNum<<2))  //绑定地址公式

#define PAout(n) BitBand(GPIOA_ODR_A,n)  //定义绑定第几个口
#define PAin(n)  BitBand(GPIOA_IDR_A,n)

//(volatile unsigned long *) 指针变量类型   

一周热门 更多>