51與STM32學(xué)習(xí)先后解析

51單片機(jī)的開(kāi)發(fā)模式基于寄存器開(kāi)發(fā),這里的寄存器我們可以把它想象成中間人。需要通過(guò)配置寄存器(端口、定時(shí)器、串口、AD、IIC、SPI等)去控制片上的外設(shè),也就是通過(guò)一定的游戲規(guī)則(沒(méi)人教你,游戲你一樣會(huì)玩,還賊溜)告訴中間人你要做什么。配置寄存器的過(guò)程是了解單片機(jī)內(nèi)部硬件非常重要的基礎(chǔ)。買一個(gè)開(kāi)發(fā)板就可以搞定這部分的學(xué)習(xí),初步掌握這些寄存器的使用方法。比如配置STC15W408AS的端口為輸入或輸出,配置定時(shí)器0的定時(shí)時(shí)間,示例代碼如下。
/*******************************************************/
void Init_STC15W408AS(void) //初始化端口
{
? ?P1M0 = 0xFF; P1M1 = 0x00;
P3M0 = 0x05; P3M1 = 0xFA;
P5M0 = 0x00; P5M1 = 0x30;
}
void Init_Timer0(void) //初始化定時(shí)器0=1ms@11.0592MHz
{
AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0xCD; //定時(shí)器賦初值
TH0 = 0xD4;
? ?ET0 = 1; ? ?//使能定時(shí)器0
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
EA = 1; //打開(kāi)總中斷
}
/*******************************************************/
所謂的“電子工程師”教唆初學(xué)者:51已經(jīng)過(guò)時(shí),直接學(xué)STM32單片機(jī)就可以了,可能還會(huì)涉及到編程思想很難轉(zhuǎn)換等言論。當(dāng)他說(shuō)出51已經(jīng)過(guò)時(shí),就知道這個(gè)人是個(gè)外行。
通過(guò)系統(tǒng)的學(xué)習(xí)和使用之后,再去學(xué)習(xí)別的單片機(jī),你會(huì)發(fā)現(xiàn)大多數(shù)的單片機(jī)的開(kāi)發(fā)使用模式都差不多,底層都是通過(guò)寄存器控制外設(shè)。51單片機(jī)直接配置寄存器,而STM32由于需要配置的寄存器較多,官方推出現(xiàn)成的庫(kù)(中間人太多,需要1個(gè)代表)讓用戶直接調(diào)用,一次性去配置所用外設(shè)的相關(guān)寄存器,這樣可以有效減少工作量以及出錯(cuò)的機(jī)率,意義重大。下面是配置STM32端口的示例代碼,使用參考:STM32單片機(jī)介紹1。
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
//PE13 PE14 開(kāi)漏輸入 檢測(cè)手動(dòng)合分閘 ?PE11預(yù)分預(yù)合 ?PE12遠(yuǎn)方就地按鍵
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
51單片機(jī)最基礎(chǔ)、最簡(jiǎn)單、最好學(xué),本著從易到難的原則先從它開(kāi)刀,去系統(tǒng)地認(rèn)識(shí)單片機(jī)并初步掌握使用單片機(jī)的一般方法,這個(gè)很關(guān)鍵,另外對(duì)于培養(yǎng)個(gè)人的自信心也有裨益。有了51單片機(jī)扎實(shí)的基礎(chǔ),其他單片機(jī)的學(xué)習(xí)即可水到渠成。
---------------------------------------------------------------------------------------------
以上是本人對(duì)51與STM32哪個(gè)先學(xué)的一些個(gè)人建議,下面講述編程習(xí)慣,日后如有添加并入此處。
1)變量名不要用a、b、c等無(wú)意義字符,代碼多了,你就能體會(huì)到有多痛苦,力求見(jiàn)名知意。
//變量定義
unsigned int KeyCount=0; //按鍵計(jì)數(shù)
volatile unsigned char DistanceValue=0; //0-DistanceBaseData之間取值
unsigned int AdjustDistanceMaxTime=0; //調(diào)距等待的最長(zhǎng)時(shí)間計(jì)數(shù)
unsigned char SendIRTime=0; //發(fā)射時(shí)間
unsigned char SendIRStep=0; //發(fā)射步驟
unsigned int OutCount=0; //輸出計(jì)數(shù)
2)if……else……嚴(yán)格對(duì)齊好,增加代碼的可讀性。
3)認(rèn)真且準(zhǔn)確的書(shū)寫(xiě)注釋,增進(jìn)代碼的可讀性與可維護(hù)性。
4)盡量少用goto語(yǔ)句,當(dāng)代碼比較復(fù)雜時(shí)很容易造成流程的混亂。
---------------------------------------------------------------------------------------------
不積跬步,無(wú)以至千里;不積小流,無(wú)以成江海。覺(jué)得不錯(cuò),動(dòng)動(dòng)發(fā)財(cái)?shù)男∈贮c(diǎn)個(gè)贊哦!