|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我自己用了很久了,分享出来希望可以帮助大家。
注意:port代表端口号,pin代表引脚编号,例如P12的端口号是1,引脚编号是2。例如要设置P12为推挽输出,则使用:GPIO_MODE_PP(1,2); 即可
- //设置单个GPIO的工作模式
- #define GPIO_MODE_BIIO(port,pin) do{ P##port##M1 &= (unsigned char)(~(1<<pin)); P##port##M0 &= (unsigned char)(~(1<<pin)); }while(0) /*传统的双向IO*/
- #define GPIO_MODE_PP(port,pin) do{ P##port##M1 &= (unsigned char)(~(1<<pin)); P##port##M0 |= (unsigned char)(1<<pin); }while(0) /*推挽输出*/
- #define GPIO_MODE_HIZIN(port,pin) do{ P##port##M1 |= (unsigned char)(1<<pin); P##port##M0 &= (unsigned char)(~(1<<pin)); }while(0) /*高阻输入*/
- #define GPIO_MODE_OD(port,pin) do{ P##port##M1 |= (unsigned char)(1<<pin); P##port##M0 |= (unsigned char)(1<<pin); }while(0) /*开漏输出*/
- //设置一个端口下的所有GPIO为同种工作模式
- #define PORT_MODE_BIIO(port) do{ P##port##M1 =0x00; P##port##M0 =0x00; }while(0) /*传统的双向IO*/
- #define PORT_MODE_PP(port) do{ P##port##M1 =0x00; P##port##M0 =0xFF; }while(0) /*推挽输出*/
- #define PORT_MODE_HIZIN(port) do{ P##port##M1 =0xFF; P##port##M0 =0x00; }while(0) /*高阻输入*/
- #define PORT_MODE_OD(port) do{ P##port##M1 =0xFF; P##port##M0 =0xFF; }while(0) /*开漏输出*/
复制代码 建议大家可以多用宏封装对寄存器的操作,一方面是方便,一方面是有助于程序的抽象和理解。
这个事情本来是STC公司的软件开发部门的事,但是人家STC不做啊,:lol:
|
打赏
-
查看全部打赏
|