欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32 LED燈閃爍程序無錯但沒有閃爍效果
[打印本頁]
作者:
哈哈我哈哈
時間:
2019-7-15 19:21
標題:
STM32 LED燈閃爍程序無錯但沒有閃爍效果
下面是我寫的程序
#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
{
}
不知道哪里有問題,編譯無錯誤無警告,但燒入單片機中卻仍只亮燈不閃爍。求解答。
作者:
gs0079
時間:
2019-7-15 20:47
沒有運行那部分代碼
作者:
cjm82
時間:
2019-7-16 00:47
建議還是用庫函數吧,現在HAL庫結合CUBE,一些基本的設置代碼都是機器生成了,作為學習者重點只需要放在了解相關概念即可,花費大量精力去死記硬背這些東西根本不值得,我到現在,32最基本的配置個IO口,如果我不查資料不復制,就算使用庫函數,直接用鍵盤敲估計我都敲不出來.更不要說配置其他的,但這根本不影響我使用32,只要我看看例程,我就知道我改哪里就能達到我需要的效果,然后直接復制即可,或者干脆整理下,下次直接#include,學習單片機,沒有任何東西是需要死記硬背的,雖然學習的時候看下寄存器是好事,但是實際中,這種代碼可讀性太差了,不要說別人寫的,就算自己寫的,隔個幾天再看也難看懂,就算要寫寄存器風格的,起碼也寫在函數里,然后函數名用個一看就懂的名字(其實庫函數也是這么干的),實際項目也遠非點亮個LED這么簡單.你試想你拿到幾千上萬行這種風格的代碼會是如何感受?對于寄存器,當故事書一樣,看一看即可.初學32,多半是51過來的,建議你試試把以前51的代碼,移植過來,這既能幫你復習以前掌握的,又能對你初步了解32起一定幫助作用.
作者:
哈哈我哈哈
時間:
2019-7-16 09:01
cjm82 發表于 2019-7-16 00:47
建議還是用庫函數吧,現在HAL庫結合CUBE,一些基本的設置代碼都是機器生成了,作為學習者重點只需要放在了解相 ...
嗯嗯好的,非常感謝您的回復!
作者:
yzwzfyz
時間:
2019-7-16 09:57
即然“程序無錯”,就應該是天氣不好,天運來了就好了。
作者:
2424113269
時間:
2019-7-16 10:13
抱歉,兄弟,我學的是庫函數板,而且還沒學幾天
作者:
zeroL
時間:
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 輸出高 }
作者:
偉寧咔咔
時間:
2019-7-16 11:00
GPIO_ODR &=~(1<<1); //亮 delay(500000); GPIO_ODR &=~(0<<1);//滅
作者:
偉寧咔咔
時間:
2019-7-16 11:00
GPIO_ODR &=~(1<<1); //亮
delay(500000);
GPIO_ODR &=~(0<<1);//滅
復制代碼
這是什么鬼
作者:
哈哈我哈哈
時間:
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
{
//函數體為空,目的是為了騙過編譯器不報錯
}
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1