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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6743|回復: 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
{

}


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

使用道具 舉報

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,一些基本的設置代碼都是機器生成了,作為學習者重點只需要放在了解相 ...

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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 輸出高  }  
回復

使用道具 舉報

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

使用道具 舉報

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

這是什么鬼
回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品麻豆日日躁夜夜躁 | 欧美一区永久视频免费观看 | 国产在线视频一区 | 亚洲视频中文字幕 | 欧美国产激情 | 亚洲日韩视频 | 欧美精品在线观看 | 99久久久无码国产精品 | 在线免费观看黄视频 | 波多野结衣二区 | 超碰97在线免费 | 国产精品久久久久无码av | 欧美日韩一区在线观看 | 一区不卡在线观看 | 中文字幕在线观 | 国产精品视频专区 | 色综合视频 | 中文字幕av网 | 亚洲欧美日韩精品 | 日韩av免费在线电影 | 亚洲一区视频在线 | 成人国产精品久久 | 狠狠色综合网站久久久久久久 | 一区二区三区亚洲 | 黄色毛片免费看 | 久久久久无码国产精品一区 | 国产激情91久久精品导航 | 中文字幕一区在线观看视频 | 久久久夜色精品亚洲 | 国产美女在线观看 | 亚洲高清一区二区三区 | 91精品一区二区三区久久久久久 | 色视频网站免费 | 91社区在线观看高清 | 久久国产欧美一区二区三区精品 | 国产高清一区二区 | 日本黄色片免费在线观看 | 可以免费观看的av片 | 操久久 | 亚洲精品9999| 色综合久久天天综合网 |