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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6679|回復: 9
打印 上一主題 下一主題
收起左側

STM32 LED燈閃爍程序無錯但沒有閃爍效果

[復制鏈接]
跳轉到指定樓層
樓主
ID:371529 發表于 2019-7-15 19:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
下面是我寫的程序

#include "stm32f10x.h"

typedef unsigned int u16;

void delay(u16 i)
{
        while(i--);       
}

int main (void)//亮藍光
{
        #if 0   //條件編譯屏蔽此部分代碼
        //打開GPIOB端口的時鐘
  *(unsigned int*)0x40021018 |=((1)<<3);
       
        //配置IO口為輸出
  *(unsigned int*)0x40010C00 |=((1)<<(4*1)); //置1操作,10進制的1
       
        //控制ODR寄存器 PB1
        *(unsigned int*)0x40010C0C &=~(1<<1);//清零操作

       
        #else
       
        //打開GPIOB端口的時鐘
        RCC_APB2ENR  |=((1)<<3);
       
        //配置IO口為輸出
        GPIO_CRL &=~((0x0f)<<(4*1)); // 將原狀態全部清零
        GPIO_CRL |=((1)<<(4*1));
       
        //控制ODR寄存器 PB1
        while(1)
        {
        GPIO_ODR  &=~(1<<1); //亮
          delay(500000);
        GPIO_ODR  &=~(0<<1);//滅
                 delay(500000);
        }
       
        #endif
}




void SystemInit(void)//start_stm32f10x_hd.s中啟動匯編時調用了SystemInit
{

}


不知道哪里有問題,編譯無錯誤無警告,但燒入單片機中卻仍只亮燈不閃爍。求解答。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 3#
ID:388197 發表于 2019-7-16 00:47 | 只看該作者
建議還是用庫函數吧,現在HAL庫結合CUBE,一些基本的設置代碼都是機器生成了,作為學習者重點只需要放在了解相關概念即可,花費大量精力去死記硬背這些東西根本不值得,我到現在,32最基本的配置個IO口,如果我不查資料不復制,就算使用庫函數,直接用鍵盤敲估計我都敲不出來.更不要說配置其他的,但這根本不影響我使用32,只要我看看例程,我就知道我改哪里就能達到我需要的效果,然后直接復制即可,或者干脆整理下,下次直接#include,學習單片機,沒有任何東西是需要死記硬背的,雖然學習的時候看下寄存器是好事,但是實際中,這種代碼可讀性太差了,不要說別人寫的,就算自己寫的,隔個幾天再看也難看懂,就算要寫寄存器風格的,起碼也寫在函數里,然后函數名用個一看就懂的名字(其實庫函數也是這么干的),實際項目也遠非點亮個LED這么簡單.你試想你拿到幾千上萬行這種風格的代碼會是如何感受?對于寄存器,當故事書一樣,看一看即可.初學32,多半是51過來的,建議你試試把以前51的代碼,移植過來,這既能幫你復習以前掌握的,又能對你初步了解32起一定幫助作用.
回復

使用道具 舉報

沙發
ID:584691 發表于 2019-7-15 20:47 | 只看該作者
沒有運行那部分代碼
回復

使用道具 舉報

地板
ID:371529 發表于 2019-7-16 09:01 | 只看該作者
cjm82 發表于 2019-7-16 00:47
建議還是用庫函數吧,現在HAL庫結合CUBE,一些基本的設置代碼都是機器生成了,作為學習者重點只需要放在了解相 ...

嗯嗯好的,非常感謝您的回復!
回復

使用道具 舉報

5#
ID:123289 發表于 2019-7-16 09:57 | 只看該作者
即然“程序無錯”,就應該是天氣不好,天運來了就好了。
回復

使用道具 舉報

6#
ID:584881 發表于 2019-7-16 10:13 | 只看該作者
抱歉,兄弟,我學的是庫函數板,而且還沒學幾天
回復

使用道具 舉報

7#
ID:424805 發表于 2019-7-16 10:20 | 只看該作者
我們常用的 IO 端口寄存器只有 4 個:CRL、CRH、IDR、ODR。
void LED_Init(void) {  RCC->APB2ENR|=1<<3;    //使能 PORTB 時鐘        RCC->APB2ENR|=1<<6;    //使能 PORTE 時鐘         GPIOB->CRL&=0XFF0FFFFF;   GPIOB->CRL|=0X00300000;//PB.5 推挽輸出          GPIOB->ODR|=1<<5;      //PB.5 輸出高             GPIOE->CRL&=0XFF0FFFFF;  GPIOE->CRL|=0X00300000;//PE.5 推挽輸出  GPIOE->ODR|=1<<5;      //PE.5 輸出高  }  
回復

使用道具 舉報

8#
ID:73666 發表于 2019-7-16 11:00 | 只看該作者
GPIO_ODR  &=~(1<<1); //亮           delay(500000);         GPIO_ODR  &=~(0<<1);//滅
回復

使用道具 舉報

9#
ID:73666 發表于 2019-7-16 11:00 | 只看該作者
  1. GPIO_ODR  &=~(1<<1); //亮
  2. delay(500000);
  3. GPIO_ODR  &=~(0<<1);//滅
復制代碼

這是什么鬼
回復

使用道具 舉報

10#
ID:371529 發表于 2019-7-17 16:53 | 只看該作者
感謝各位,現已解決,附代碼見下。
啊吐槽一句32果然比51復雜多了,配置寄存器真是腦殼疼。

#include "stm32f10x.h"//從底層學習
#include "stm32f10x_gpio.h"//從頭文件中調用函數

typedef unsigned int u16;
void delay(u16 i)
{
        while(i--);       
}

//此為工程模版

int main (void)//亮藍光
{
        #if 0
       
        //打開GPIOB端口的時鐘
  RCC_APB2ENR  |=((1)<<3);
       
        //配置IO口為輸出
  GPIO_CRL &=~((0x0f)<<(4*1)); // 將原狀態全部清零
        GPIO_CRL |=((1)<<(4*1));
       
        //控制ODR寄存器 PB1
       
   #elif 0
               
        //打開GPIOB端口的時鐘
  RCC->APB2ENR  |=((1)<<3);
       
        //配置IO口為輸出
  GPIOB->CRL &=~((0x0f)<<(4*1)); // 將原狀態全部清零
        GPIOB->CRL |=((1)<<(4*1));//置1操作,10進制的1  0001
       
        //控制ODR寄存器 PB1
        GPIOB->ODR  &=~(1<<1);//清零操作
       
        #elif 1
        GPIO_InitTypeDef  GPIO_InitStructure;//變量定義位于函數開頭,靠近大括號
       
//  GPIO_InitStructure.GPIO_Pin        =GPIO_Pin_0;
//  GPIO_InitStructure.GPIO_Mode        =GPIO_Mode_OUT_PP;
//        GPIO_InitStructure.GPIO_Speed        =GPIO_Speed_50MHz;
//        //配置好后將這些值寫入寄存器中 此時調用GPIO_Init函數
//        GPIO_Init( GPIOB, &GPIO_InitStructure);//變量取地址用&

/*需要先打開時鐘再配置IO口,否則無反應*/

    //打開GPIOB端口的時鐘
  RCC->APB2ENR  |=((1)<<3);
       
   GPIO_InitStructure.GPIO_Pin        =GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode        =GPIO_Mode_OUT_PP;
        GPIO_InitStructure.GPIO_Speed        =GPIO_Speed_50MHz;
        //配置好后將這些值寫入寄存器中 此時調用GPIO_Init函數
        GPIO_Init( GPIOB, &GPIO_InitStructure);//變量取地址用&
       
  //置位取1,燈滅
  GPIO_SetBits(GPIOB,GPIO_Pin_5);//傳入第一個形參GPIOB,5腳亮紅光   
  
  GPIO_ResetBits(GPIOB,GPIO_Pin_5);
       
        while (1)
        {
        GPIO_SetBits(GPIOB,GPIO_Pin_5);
                delay(0xFFFF);
        GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    delay(0xFFFF);               
        }
       
       
    #endif
}




void SystemInit(void)//start_stm32f10x_hd.s中啟動匯編時調用了SystemInit
{
  //函數體為空,目的是為了騙過編譯器不報錯
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩资源 | 欧美精品二区 | 亚洲欧美综合精品另类天天更新 | 国产污视频在线 | 日韩一级| 性xxxxx| 午夜爽爽男女免费观看hd | 久久精品亚洲国产 | 欧美日韩亚洲一区 | 日本黄色影片在线观看 | 日韩视频精品在线 | 久久国产免费 | 日本精品一区二区在线观看 | 欧美国产日韩一区 | 亚洲一区二区在线视频 | 日韩第一区| 在线观看视频中文字幕 | 国产高清精品网站 | 亚洲久久一区 | 草久免费视频 | 久久一及片 | 国产在线精品一区二区三区 | 欧美日韩久久久久 | 久久精品国产精品青草 | 国产精品三级久久久久久电影 | 午夜天堂精品久久久久 | 亚洲色图在线观看 | av香蕉| 日韩欧美在线一区 | 久久久久久久久久久久久91 | 国产日韩视频 | 亚洲一区二区久久 | 日韩中文字幕久久 | 国产乱码精品一品二品 | 精品少妇一区二区三区在线播放 | av天天操| 欧美一区中文字幕 | 亚洲精品短视频 | 免费在线一区二区 | 草久久 | 亚洲人人 |