<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                今天是學校stm32的第二天,昨天對整個板子,以及stm32構架有一個大致的了解,今天在解決按鍵的時候,就輕松多了。 廢話不多說,直接進入主題: SW5 ? PE14 SW4 ? PE15 SW3 ? PB10 SW2 ? PB11 這是我按鍵對應的管腳【由于我的板子是學長給的,出了板子之外其他的什么都木有,木辦法,所有引腳的連接都是用萬用表測出來的,費了好大的事,呵呵,廢話了】 ### 一、按鍵管腳的配置【下面是簡易圖】 ![](https://box.kancloud.cn/2016-06-21_576915b18a594.jpg) 配置程序: ~~~ int sw5_config() { GPIO_TypeDef *sw5 = GPIOE; RCC->APB2ENR |= 1<<6; sw5->CRH &= ~(0xf<<(4*6));//Clear PE14 Register sw5->CRH |= 8<<(4*6); //Set PE14 Register [TO:pull up / down] sw5->ODR |= GPIO_Pin_14; //Enable PIN14 return 0; } ~~~ GPIO_TypeDef 這個結構體在stm32f10x.h里面,于是方便了我們的使用; GPIO_TypeDef *sw5 = GPIOE;這樣更方便我們對程序的識別 RCC->APB2ENR |= 1<<6;是選中GPIOE,具體看下面的datasheet ![](https://box.kancloud.cn/2016-06-21_576915b19d1dd.jpg) 其他的注釋都說的很清楚; ### 二、主程序的實現 ~~~ int main() { GPIO_TypeDef *led = GPIOE; sys_init(9); /*Config LED*/ RCC->APB2ENR |= 1<<6; led->CRL &= 0xFFFFFFF0; led->CRL |= 0x3 << 0; led->ODR |= GPIO_Pin_0; led->BRR |= GPIO_Pin_0; // LED ON delay_ms(1000); led->BSRR |= GPIO_Pin_0; // LED??OFF sw5_config(); while(1) { if(!(GPIOE->IDR & GPIO_Pin_14)) { delay_ms(20); if(!(GPIOE->IDR & GPIO_Pin_14)) { led->BRR |= GPIO_Pin_0; //LED ON } } else { led->BSRR |= GPIO_Pin_0; //LED OFF } } } ~~~ sys_init()函數昨天已經介紹過了,但是今天發現了一些不足,有重新進行了一下修改 ~~~ int sys_init(unsigned char PLL) { unsigned char temp = 0; RCC->CR |= 1<<16; //OPEN HSE while(!(RCC->CR>>17)); RCC->CFGR = 0x04<<8; //APB1 HSE/2 PLL -= 2; //9-2 = 0111b RCC->CFGR |= PLL << 18; //0111 ==> X9 RCC->CFGR |= 1 << 16; //PREDIV1 ouput as source of PLL FLASH->ACR |= 0x32; //With RCC->CR |= 1<<24; //enable PLL [24bit] while(!(RCC->CR >> 25)); RCC->CFGR |= 0x2<<0;//PLL As System Clock while(temp != 0x02) { temp = RCC->CFGR >> 2; temp &= 0x03; } return 0; } ~~~ !(GPIOE->IDR & GPIO_Pin_14)這里是獲取14引腳的狀態,主要看看IDR寄存器 ![](https://box.kancloud.cn/2016-06-21_576915b1c0f38.jpg) 這樣大家就不難理解了吧? 注意: 我在看好多示例程序的時候,發現那些開發者經常犯一個危險的錯誤,這里我先說我的代碼寫法 led->BRR |= GPIO_Pin_0;//LED ON 這里在處理寄存器的時候用了“|=”,就是為了防止影響別的寄存器內容 可能大家都知道,但是經常不注意 OK,今天就先到這里
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看