已知这是控制PB0引脚为低电平
// 打开GBIOB端口的时钟
RCC_APB2ENR |= ( (1) << 3 );
// 配置IO口为输出
GPIOB_CRL &= ~( (0x0f) << (4*0) );
GPIOB_CRL |= ( (1) << (4*0) );
// 控制ODR寄存器
GPIOB_ODR &= ~(1<<0);
//GPIOB_ODR |= (1<<0);
stm32以åå ¶å®è¯ççç¼ç¨å®é ä¸å°±æ¯æä½å¯åå¨ã
stm32çå¯åå¨çå«ä¹å¨å®çææ¯æåä¸å¯ä»¥æ¥æ¾å°ï¼å¯ä»¥çå°å®æ¯ä¸ä½çå«ä¹ã
|= ( (1) << x )çæä½ç»æå°±æ¯æè¿ä¸ªå¯åå¨çbitxç½®1ï¼ &= ~(1<<x)çæä½ç»æå°±æ¯æbitxç½®0.è¿æ ·çæä½é½æ¯ä¸ºäºä¸å½±åå¯åå¨çå
¶å®ä½ï¼åªå»æä½æå®çbitãè³äºè¿ä¸¤ä¸ªè¡¨è¾¾å¼çè¿ç®ï¼ä½ åºè¯¥æ¸
æ¥å§ï¼ä¸æ¸
æ¥çè¯å¯ä»¥è¿½é®ã
æä½ioå£ä¸è¬å°±æ¯3æ¥ï¼å¦ä½ 代ç ä¸æ³¨éæåã第ä¸æ¥æå¼æ¶éï¼ç¬¬äºæ¥åå§åIOå£ï¼ç¬¬ä¸æ¥æä½ã
RCC_APB2ENR |= ( (1) << 3 );è¿ä¸æ¥æ¯æRCC_APB2ENRçbit3ç½®1ï¼å³ä½¿è½GPIOBæ¶éã对åºçåºè¯¥æstm32çåºå½æ°å¦RCC_APB2PeriphClockCmd.å¦æä½ æ¥ç对åºè¯ççdatasheet,åºè¯¥å¯ä»¥çå°å¯¹è¿ä¸bitçæè¿°æ¯ç±»ä¼¼è¿æ ·ç.
é£ä¹å¦æä½ è¦ä½¿ç¨GPIOCï¼é£å°±éè¦å»ä½¿è½RCC_APB2ENR对åºçGPIOCçbitï¼ä¾å¦RCC_APB2ENR |= ( (1) << 4 );(å¦æGPIOC对åºç使è½bitæ¯bit4çè¯)
GPIOB_CRL &= ~( (0x0f) << (4*0) );
GPIOB_CRL |= ( (1) << (4*0) );åæ ·çéçï¼å»æ¥çå¯åå¨GPIOB_CRL çå®ä¹ï¼ä¸è¿ææ¯æåä¸åºè¯¥æ¯GPIOx_CRLï¼å 为ææçio portçæ ¼å¼æ¯ä¸æ ·ç
å¦æä½ è¦æä½PB1ï¼åºè¯¥ä¿®æ¹å两æ¥ï¼GPIOB_CRL &= ~( (0x0f) << (4*1) );
GPIOB_CRL |= ( (1) << (4*1) ); GPIOB_ODR &= ~(1<<1);ï¼æ²¡æçå°datasheetï¼çæµåºè¯¥å¦æ¤ï¼
æåä¸ç¹ï¼å»ºè®®ä½¿ç¨stm32å®æ¹åºå½æ°ï¼ç¼ç¨æ¹ä¾¿ï¼ä¸ä»¥åä¹ä¾¿äºç§»æ¤ã
为什么我试过了没有用呢,如果把PB1设置成高电平,可以用GPIOB_ODR |= (1<<1)设置吗
追答还需要设置GPIOB_CRL中相应位,将GPB_1设置成输出。
具体需要查看所使用的cpu数据手册中关于配置GPIO部分的文档,查阅上述程序涉及的寄存器定义