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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6876|回復: 9
收起左側

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

[復制鏈接]
ID:371529 發(fā)表于 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)); // 將原狀態(tài)全部清零
        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
{

}


不知道哪里有問題,編譯無錯誤無警告,但燒入單片機中卻仍只亮燈不閃爍。求解答。
回復

使用道具 舉報

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

使用道具 舉報

ID:584691 發(fā)表于 2019-7-15 20:47 | 顯示全部樓層
沒有運行那部分代碼
回復

使用道具 舉報

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

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

使用道具 舉報

ID:123289 發(fā)表于 2019-7-16 09:57 | 顯示全部樓層
即然“程序無錯”,就應該是天氣不好,天運來了就好了。
回復

使用道具 舉報

ID:584881 發(fā)表于 2019-7-16 10:13 | 顯示全部樓層
抱歉,兄弟,我學的是庫函數板,而且還沒學幾天
回復

使用道具 舉報

ID:424805 發(fā)表于 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 輸出高  }  
回復

使用道具 舉報

ID:73666 發(fā)表于 2019-7-16 11:00 | 顯示全部樓層
GPIO_ODR  &=~(1<<1); //亮           delay(500000);         GPIO_ODR  &=~(0<<1);//滅
回復

使用道具 舉報

ID:73666 發(fā)表于 2019-7-16 11:00 | 顯示全部樓層
  1. GPIO_ODR  &=~(1<<1); //亮
  2. delay(500000);
  3. GPIO_ODR  &=~(0<<1);//滅
復制代碼

這是什么鬼
回復

使用道具 舉報

ID:371529 發(fā)表于 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)); // 將原狀態(tài)全部清零
        GPIO_CRL |=((1)<<(4*1));
       
        //控制ODR寄存器 PB1
       
   #elif 0
               
        //打開GPIOB端口的時鐘
  RCC->APB2ENR  |=((1)<<3);
       
        //配置IO口為輸出
  GPIOB->CRL &=~((0x0f)<<(4*1)); // 將原狀態(tài)全部清零
        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
{
  //函數體為空,目的是為了騙過編譯器不報錯
}
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99久久久久久动医院 | 伊人久久麻豆 | 久久69精品久久久久久久电影好 | 日韩中文字幕在线视频 | 亚洲一区二区中文字幕在线观看 | 国产精品一区二区三区99 | 国产精品高清一区二区三区 | 九九亚洲| 国产午夜精品一区二区三区四区 | 欧美中文字幕一区二区 | 久久久久一区二区三区 | 成人免费在线网 | 日本久久精 | 久久久激情 | 亚洲国产精品久久久久婷婷老年 | 日韩av黄色 | 日韩成人精品在线 | 日批日韩在线观看 | 殴美黄色录像 | 一级做受毛片免费大片 | 欧美一区二区三区在线播放 | 日韩欧美成人精品 | 99视频在线免费观看 | 久久精品91久久久久久再现 | 一色桃子av一区二区 | 国产精品永久免费视频 | 91精品国产综合久久国产大片 | 欧美5区| 精品国产乱码久久久久久88av | 99精品久久| 中文字幕一区在线观看视频 | 午夜私人影院 | 伊人无码高清 | 97精品超碰一区二区三区 | 一道本不卡视频 | 国产综合精品一区二区三区 | 久久国产麻豆 | 国产高清在线精品一区二区三区 | 九九久久精品视频 | 色综合一区二区 | 久久麻豆精品 |