久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2573|回復: 1
收起左側

為什么我的STM32 B口不能設置為輸出.問題出在哪里

[復制鏈接]
ID:375003 發表于 2019-3-13 17:57 | 顯示全部樓層 |閱讀模式
/*******************************************************************************
* 文件名          : main.c
* 作者            : Losingamong
* 時間                          : 08/08/2008
* 文件描述        : 主函數
********************************************************************************/

/* 頭文件    ------------------------------------------------------------------*/

#include "stm32f10x_lib.h"

//*****************************************************************
//*                               SystemTick-Register                                   
//*******************************************************************
#define SYSTICK_TENMS    (*((volatile unsigned long *)0xE000E01C))
#define SYSTICK_CURRENT  (*((volatile unsigned long *)0xE000E018))
#define SYSTICK_RELOAD   (*((volatile unsigned long *)0xE000E014))
#define SYSTICK_CSR       (*((volatile unsigned long *)0xE000E010))

void RCC_Configuration(void);
void GPIO_Configuration(void);
void Systick_Configuration(void);
void Delay_Second(void);
/****************************************************
* 函數名                 :Systick_Configuration
* 函數描述       :設置Systick定時器,重裝時間為0.1秒;
* 輸入參數       : 無
*****************************************************/
void Systick_Configuration(void)
{
   SYSTICK_CURRENT=0; //當前值寄存器
   SYSTICK_RELOAD=20000; //重裝載寄存器,系統時鐘20M中斷一次1mS
   SYSTICK_CSR|=0x06;// HCLK作為Systick時鐘,Systick中斷使能位
}


unsigned long TimingDelay; // 延時時間,注意定義為全局變量
void SysTick_Handler(void) //中斷函數
{
        extern unsigned long TimingDelay; // 延時時間,注意定義為全局變量
        SYSTICK_CURRENT=0;
        if (TimingDelay != 0x00)
        TimingDelay--;
}

void Delay(unsigned long nTime)  //延時函數
{
        SYSTICK_CSR|=0x07;   // 使能SysTick計數器
        TimingDelay = nTime; // 讀取延時時間
        while(TimingDelay != 0); // 判斷延時是否結束
        SYSTICK_CSR|=0x06;// 關閉SysTick計數器
}
//毫秒級的延時
void delay_ms(u16 time)
{   
   u16 i=0;  
   while(time--)
   {
      i=8000;  //自己定義8000
      while(i--) ;   
   }
}
/****************************************************
* 函數名                 : main
* 函數描述       : Main 函數
* 輸入參數       : 無
* 輸出結果       : 無
* 返回值         : 無
*****************************************************/

int main(void)
{

          /* 設置系統時鐘 */
          RCC_Configuration();                        

          /* 設置GPIO端口 */
          GPIO_Configuration();
        Systick_Configuration();//設置定時器;
    GPIO_ResetBits(GPIOA , GPIO_Pin_8);         // PA.2輸出低電平
    delay_ms(300);
        GPIO_SetBits(GPIOA , GPIO_Pin_8);                  // PA.3輸出高電平
        while(1)
        {  
            GPIO_ResetBits(GPIOA , GPIO_Pin_8 );         // PA.2輸出低電平
        delay_ms(50);
            GPIO_SetBits(GPIOA , GPIO_Pin_8 );                  // PA.3輸出高電平        
            delay_ms(50);

            GPIO_ResetBits(GPIOB, GPIO_Pin_9);         // PB.9輸出低電平,燈亮
//        Delay(50);
        delay_ms(50);
            GPIO_SetBits(GPIOB, GPIO_Pin_9);                  // PB.9輸出高電平,燈滅
//            Delay(50);
        delay_ms(50);
        }

}



/*******************************************************************************
* 函數名        : RCC_Configuration
* 函數描述  : 設置系統各部分時鐘
* 輸入參數  : 無
* 輸出結果  : 無
* 返回值    : 無
*******************************************************************************/

void RCC_Configuration(void)
{
        /* 定義枚舉類型變量 HSEStartUpStatus */
        ErrorStatus HSEStartUpStatus;

          /* 復位系統時鐘設置*/
          RCC_DeInit();

          /* 開啟HSE*/
          RCC_HSEConfig(RCC_HSE_ON);

          /* 等待HSE起振并穩定*/
          HSEStartUpStatus = RCC_WaitForHSEStartUp();
        
        /* 判斷HSE起是否振成功,是則進入if()內部 */
          if(HSEStartUpStatus == SUCCESS)
          {
            /* 選擇HCLK(AHB)時鐘源為SYSCLK 1分頻 */
            RCC_HCLKConfig(RCC_SYSCLK_Div1);

            /* 選擇PCLK2時鐘源為 HCLK(AHB) 1分頻 */
            RCC_PCLK2Config(RCC_HCLK_Div1);

            /* 選擇PCLK1時鐘源為 HCLK(AHB) 2分頻 */
            RCC_PCLK1Config(RCC_HCLK_Div2);

            /* 設置FLASH延時周期數為2 */
            FLASH_SetLatency(FLASH_Latency_2);
            /* 使能FLASH預取緩存 */
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

            /* 選擇鎖相環(PLL)時鐘源為HSE 1分頻,倍頻數為9,則PLL輸出頻率為 8MHz * 9 = 72MHz */
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

            /* 使能PLL */
            RCC_PLLCmd(ENABLE);

            /* 等待PLL輸出穩定 */
            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

            /* 選擇SYSCLK時鐘源為PLL */
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

            /* 等待PLL成為SYSCLK時鐘源 */
            while(RCC_GetSYSCLKSource() != 0x08);
          }

          /* 打開APB2總線上的GPIOA時鐘*/
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
}


/*******************************************************************************
* 函數名                  : GPIO_Configuration
* 函數描述            : 設置各GPIO端口功能
* 輸入參數      : 無
* 輸出結果      : 無
* 返回值        : 無
*******************************************************************************/

void GPIO_Configuration(void)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          /* 設置PA2,PA3口為推挽輸出,最大翻轉頻率為50MHz*/
          //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
   /*設置PA8口為推挽輸出,*/
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;//| GPIO_Pin_12;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;//開漏輸出 GPIO_Mode_Out_PP;//推挽輸出
          GPIO_Init(GPIOA , &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;//OD開漏輸出 GPIO_Mode_Out_PP;//推挽輸出
          GPIO_Init(GPIOB , &GPIO_InitStructure);
}

回復

使用道具 舉報

ID:375003 發表于 2019-3-17 20:29 | 顯示全部樓層
問題終于解決了,是沒有使能portB口時鐘.
最后面設置各GPIO端口功能里面加上
RCC->APB2ENR|=1<<2;//使能PORTA口時鐘
RCC->APB2ENR|=1<<3;//使能PORTB口時鐘
完整程序如下:
void GPIO_Configuration(void)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          RCC->APB2ENR|=1<<2;//使能PORTA口時鐘
          RCC->APB2ENR|=1<<3;//使能PORTB口時鐘
         /*設置PA8口為推挽輸出,*/
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;//| GPIO_Pin_12;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;//開漏輸出 GPIO_Mode_Out_PP;//推挽輸出
          GPIO_Init(GPIOA , &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;//OD開漏輸出 GPIO_Mode_Out_PP;//推挽輸出
          GPIO_Init(GPIOB , &GPIO_InitStructure);
}

希望對你有些幫助

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九久久国产精品 | 日操夜操| 在线看日韩 | 色在线看 | 日韩中文字幕网 | 中文字幕av在线 | 日日摸夜夜添夜夜添特色大片 | 精品中文字幕一区二区 | 国产精品日韩一区二区 | 日韩精品一区二区三区在线观看 | 天天干天天爱天天操 | 国产高清免费在线 | 久久精品一 | 中文字幕 在线观看 | 黄色一级电影在线观看 | www狠狠干 | 欧美6一10sex性hd | 亚洲精品一区二区三区在线观看 | 自拍偷拍亚洲一区 | 三级成人在线观看 | 91网站视频在线观看 | 欧美精品在线一区二区三区 | 久久久久久九九九九 | 国产成人精品亚洲日本在线观看 | 欧美电影在线观看网站 | 激情91 | 在线精品国产 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 日韩精品一区二区三区中文字幕 | 毛片一级片| 欧美日韩在线一区二区三区 | 草久视频 | 99精品视频在线 | 毛片站| 久久精品毛片 | 美女二区 | 欧美精品一区二区三区蜜桃视频 | 最新中文字幕在线 | 国产区在线看 | 成人免费观看男女羞羞视频 | 国产在线视频一区二区董小宛性色 |