欧美激情久久久久久,人妻久久精品天天中文字幕,国产精品无码色一区二区三区按摩 ,日韩中文无码有码免费视频

程控直流電源體系單片機引腳連錯了該如何解決呢?

程控直流電源體系單片機,內部有 16K Bytes FLASH 程序存儲器,256 Bytes IRAM 和 256 Bytes XRAM,18 個(gè)雙向 I/O 口,5 個(gè) 16 位定時(shí)器/計數器,3 組 12 位帶死區操控互補 PWM,1 個(gè) 8 位 PWM,2 個(gè) UART,1 個(gè) SPI,16 個(gè)外部中止,8+2 路 12 位ADC,四種體系作業(yè)形式(正常、低頻、掉電和空閑)和 16 個(gè)中止源。
在程控直流電源體系單片機上用到許多的中止。在這一款芯片上滿(mǎn)意滿(mǎn)意絕大部分的產(chǎn)品規劃。
Hc89f003具有:
? 16個(gè)中止源
? 4級中止優(yōu)先級
? 16個(gè)外部中止
要點(diǎn)來(lái)了:一般我們的程控直流電源體系單片機,比方像51,比較少重映射功用的,比方stm32,他們的重映射功用對應的引腳根本都有固定的引腳??墒?,hc89f003不一樣了,他絕大部分引腳都能夠重映射,比方P00能夠作為io口,能夠重映射為usart_tx、usart_rx、iic、spi等等等等。也就是說(shuō),規劃板子的時(shí)分不必懼怕硬件銜接過(guò)錯,只需銜接上了,根本能夠完結重映射功用。
Datasheet給出的闡明:絕大多數復用端口能夠映射到恣意 I/O 口,但 PWM 故障檢測腳、ADC 輸入、INT0-15 功用口等在外。
留意的是:多個(gè)輸出映射到一個(gè)端口上時(shí),只能有一個(gè)輸出有用。端口重映射類(lèi)似中止一樣還有優(yōu)先級的。
*下面是默許的優(yōu)先級:
程控直流電源系統單片機引腳連錯了該如何解決呢?

比方:
CLKO_MAP 裝備為 0x01 挑選 P0.1 口作為 CLKO 的輸出口,T4_MAP 也裝備為 0x01,這個(gè)時(shí)分硬件會(huì )按上面的優(yōu)先級,P0.1 將裝備為 CLKO 的輸出口,而 T4_MAP 的裝備無(wú)效。
當一切的端口映射操控寄存器都不等于0x01時(shí),即一切的功用口都不挑選P0.1作為輸入輸出口,此刻這個(gè)端口的輸出就是 P0 端口數據寄存器的第 1 位。
輸入能夠裝備為多個(gè)功用從一個(gè) PAD 引腳進(jìn)入,比方:
T0_MAP 裝備為 0x23,則挑選 P2.3 作為 T0 的輸進(jìn)口,T5_MAP 也裝備為 0x23,這樣從 P2.3 端口進(jìn)入的信號一起作用于 T3 和 T5。
將 TXD 和 RXD 都裝備到一個(gè)端口上時(shí),并且此端口設置為輸出,則 TXD 和 RXD 將內部銜接起來(lái)。
在輸入時(shí),不論端口是什么功用,讀端口數據寄存器都讀芯片引腳上值。
關(guān)于重映射功用有疑問(wèn)的請仔細閱覽官方datasheet。http://www.holychip.cn/uploadfiles/release/preview/HC89F003_003P_SPEC_Ver1.03.pdf(畢竟是中國芯圣產(chǎn)的,datasheet閱覽起來(lái)毫無(wú)壓力,曾經(jīng)看英文的,讓我這種四級都沒(méi)過(guò)的孩子頭都大了)
HC89F003 運用留意事項 :(官方datasheet的重要闡明,運用芯片時(shí)一定要仔細看datasheet)
1、 為確保體系的穩定性,有必要在 VDD 和 GND 之直接一電容(容值須等于或大于 0.1μF)。(關(guān)于這點(diǎn),一般我們用芯片的時(shí)分都會(huì )這姿態(tài)做,加個(gè)電容)
2、 為確保體系的上電穩定性,主張客戶(hù)程序在體系發(fā)生 POR 復位后進(jìn)行一次重讀代碼選項的軟復位操作。官方闡明這項現已改善(我覺(jué)得仍是很OK的能夠去官網(wǎng)下載新版的datasheet)
3、 當運用 ADC 模塊時(shí),不論參閱電壓挑選的是什么,體系作業(yè)電壓 VDD 有必要高于 2.7V。(參閱電壓一般為GND,這個(gè)vdd一般為3.3v)
4、 外部中止在運用查詢(xún)方法時(shí),無(wú)法正常鏟除中止標志位。能夠經(jīng)過(guò)先制止中止使能位再鏟除中止標志,在完結鏟除中止標志位后再使能外部中止來(lái)進(jìn)行正常的外部中止發(fā)生查詢(xún)。運用中止方法時(shí),無(wú)該問(wèn)題。
5、 當用戶(hù)運用 T3 計數時(shí)鐘源挑選端口輸入外部時(shí)鐘,應使 TR3 和 T3CLKS[1:0]的裝備一起進(jìn)行(即用一條指令完結裝備)。(個(gè)人感覺(jué)比較奇怪,可是仍是能夠依照他的做的。他說(shuō)一條指令就一條指令吧。)
介紹了那么多,是時(shí)分上點(diǎn)開(kāi)箱圖了。
國慶回家前接到板子,小的讓我出人意料啊,感謝21ic小喇叭,開(kāi)心。
翻開(kāi)之后可見(jiàn)一個(gè)開(kāi)發(fā)板,一個(gè)51link以及一根數據線(xiàn)。
初度見(jiàn)到51—link,有點(diǎn)小小的驚奇。哈哈哈,怪我才智不夠。。。。得好好盡力了。
翻開(kāi)看看51link里邊是什么東西,一看,嚇一跳,原來(lái)是stm32f1系列芯片。
程控直流電源系統單片機引腳連錯了該如何解決呢?

這個(gè)小板子做的仍是挺精美的,按鍵,一些必要的電路都搭載在這一小塊上面。
20pin的io口一切現已引出了。板載ch340驅動(dòng)電路
然后下載回來(lái)一堆材料,開(kāi)干,不就是51內核的芯片嗎,不難吧。(這是我剛開(kāi)始的主意。。。我發(fā)現我錯了,做智能車(chē)的時(shí)分,我就說(shuō)過(guò),當你一開(kāi)始就小看了它,你就現已輸了一半了。。。不過(guò)還好,我仍是能夠把它搞定的哈哈)
到芯圣電子的官網(wǎng)下載回來(lái)一堆材料,漸漸看,裝驅動(dòng),裝hc-link,然后翻開(kāi)例程代碼,翻開(kāi)datasheet,漸漸搞。。。
我也是先下載回來(lái)的,然后先裝hc-51link,這個(gè)比較簡(jiǎn)單,那里也有用戶(hù)手冊。
對其他體系解說(shuō)的很具體,本人是64位 win7的,比較簡(jiǎn)單。
程控直流電源系統單片機引腳連錯了該如何解決呢?

請留意:裝置在keil文件夾下。
請留意:裝置在keil文件夾下。
請留意:裝置在keil文件夾下。
重要的工作說(shuō)3遍。
然后一向next就行了,主張把360啊什么殺毒的軟件退出再裝置。
然后翻開(kāi)flash技術(shù)材料> F003 Library Example V1.01
這是庫函數版別的例程,很像stm32。入門(mén)玩起來(lái)不難。
F003 Register ExampleV1.01>這是寄存器版別的。我沒(méi)看。
隨意翻開(kāi)一個(gè)gpio的工程:
我初度一看,哎呀,怎樣這么熟悉啊,,,,,哈哈哈
進(jìn)入體系初始化看一下,中心部分就是挑選體系時(shí)鐘
/**
* @闡明 設定體系時(shí)鐘OSC頻率,即外設時(shí)鐘(Timer UART SPI等)
* @參數 OscClock :OSC時(shí)鐘設定值
* CLK_OSC_32MHZ //體系時(shí)鐘32M
* CLK_OSC_16MHZ //體系時(shí)鐘16M
* CLK_OSC_8MHZ //體系時(shí)鐘8M
* CLK_OSC_4MHZ //體系時(shí)鐘4M
* CLK_OSC_44KHZ //體系時(shí)鐘44KHZ
* @返回值 ErrorStatus :表明OSC裝備狀態(tài)
* 參閱 ErrorStatus 枚舉類(lèi).
* @注 無(wú)
*/
ErrorStatus CLK_OscClockConfig(CLK_OscClock_Typedef OscClock)
{
u8 OscClkBuf;
if(OscClock == CLK_OSC_44KHZ)
{//運用低頻作為體系時(shí)鐘
CLKSWR = (CLKSWR&(~CLK_SYS_SEL))|CLK_OSC_44KHZ; //開(kāi)低頻晶振
while((CLKSWR&CLK_SYS_STA)!=CLK_RC44KHZ_FLAG);//等候晶振起振

return SUCCESS;
}
else
{//運用高頻作為體系時(shí)鐘
if((OscClock == CLK_OSC_32MHZ)&&(CLKDIV < CLK_CLKDIV_RESET_VALUE))return ERROR;//如果終究CPU時(shí)鐘高于20M,則裝備失利
CLKSWR = (CLKSWR&(~CLK_SYS_SEL))|CLK_RC32MHZ; //發(fā)動(dòng)內部高頻
while((CLKSWR&CLK_SYS_STA)!=CLK_RC32MHZ_FLAG); //等候高頻晶振起振
OscClkBuf = CLKDIV;
CLKDIV = 2; //確保CPU作業(yè)在20M以下,
CLKSWR = OscClock|(CLKSWR&(~CLK_RC32M_DIV)); //設置RC32M分頻系數
CLKDIV = OscClkBuf; //恢復CPU分頻系數
return SUCCESS;
}
}
HC89F003 程控直流電源體系單片機體系時(shí)鐘有 2 種時(shí)鐘源可選:內部高頻 RC 時(shí)鐘(32 MHz)和內部低頻 RC 時(shí)鐘(44KHz)。其中,內部高頻 RC 在-40°C ~+85°C 規模差錯不超越 1%。挑選后的體系時(shí)鐘(如果挑選的是內部高頻 RC,則經(jīng) RC32M_DIV[1:0]分頻后的時(shí)鐘)記做 osc_clk,其頻率為 F osc ,周期為 T osc ,
首要用于外設模塊,osc_clk 能夠進(jìn)行 1-255 之間恣意值的分頻,分頻后的時(shí)鐘記做 CPU 時(shí)鐘,其頻率為 F cpu ,周期為 T cpu 。
CPU 最高能夠運行在 20MHz 頻率下,如果所選時(shí)鐘源頻率高于 20MHz,需求對其進(jìn)行分頻,使CPU 時(shí)鐘頻率等于或低于 20MHz。
內部低頻 RC(RC44K)輸出的時(shí)鐘記做 wdt_clk,用于看門(mén)狗定時(shí)器的計數,也能夠用于體系時(shí)鐘;內部高頻 RC(RC32M)輸出的時(shí)鐘記做 rc32m_clk,能夠進(jìn)行 1/2/4/8 分頻。
程控直流電源系統單片機引腳連錯了該如何解決呢?

體系初始化完結就能對芯片的引腳進(jìn)行操作了。。。。
然后就是GPIO的初始化函數了,芯圣對我們仍是很好的,現已集成庫函數了,直接調用就OK。
一句代碼的工作:
GPIO_Init(GPIOT0,GPIO_PIN_2,GPIO_MODE_IN_PU); //將P02端口設置為上拉電阻形式
庫函數的運用方法很簡(jiǎn)單啊,假如我想讓P00設置為推挽輸出形式。。。
直接將 GPIO_PIN_2變?yōu)镚PIO_PIN_0。
GPIO_MODE_IN_PU變?yōu)镚PIO_MODE_OUT_PP
GPIO_Init(GPIOT0,GPIO_PIN_0, GPIO_MODE_OUT_PP); //P00設置為推挽輸出形式
/**
* @闡明 對一組端口中的一個(gè)或多個(gè)IO設置形式
* @參數 GPIOx : 初始化的端口組(x:0-2)
* GPIOT0 //端口0組
* GPIOT1 //端口1組
* GPIOT2 //端口2組
* @參數 GPIO_PIN : 初始化的端口號
* GPIO_PIN_0 //挑選端口0
* GPIO_PIN_1 //挑選端口1
* GPIO_PIN_2 //挑選端口2
* GPIO_PIN_3 //挑選端口3
* GPIO_PIN_4 //挑選端口4

* GPIO_PIN_5 //挑選端口5
* GPIO_PIN_6 //挑選端口6
* GPIO_PIN_7 //挑選端口7
* @參數 GPIO_Mode : 初始化形式
* GPIO_MODE_IN //數字輸入
* GPIO_MODE_IN_PD //帶下拉輸入
* GPIO_MODE_IN_PU //帶上拉輸入
* GPIO_MODE_IN_AN //模仿輸入
* GPIO_MODE_IN_SMT //數字輸入 SMT
* GPIO_MODE_IN_PD_SMT //帶下拉輸入 SMT
* GPIO_MODE_IN_PU_SMT //帶上拉輸入 SMT
* GPIO_MODE_IN_AN_PU_PD //模仿輸入上下拉一起翻開(kāi),B版今后芯片支撐
* GPIO_MODE_OUT_PP //推挽輸出
* GPIO_MODE_OUT_OD //開(kāi)漏輸出
* GPIO_MODE_OUT_OD_PU //開(kāi)漏帶上拉輸出
* @返回值 無(wú)
* @注 無(wú)
*/
void GPIO_Init(GPIO_TypeDef GPIOx,GPIO_Pin_TypeDef GPIO_PIN,GPIO_Mode_TypeDef GPIO_Mode)
{
u8 i;
u8 xdata *gpioset;
gpioset = 0xFF00 | ((GPIOx - 1)<<3);
for(i=0;i<8;i++){
if((GPIOx == GPIOT1)&&(i>1))break;
if(GPIO_PIN&0x01){
*(gpioset+i/2) = ((*(gpioset+i/2)) & (0xF0 >> ((i%2)*0x04))) | (GPIO_Mode << ((i%2)*0x04));
}
GPIO_PIN >>= 1;
}
}
上面是void GPIO_Init(GPIO_TypeDef GPIOx,GPIO_Pin_TypeDef GPIO_PIN,GPIO_Mode_TypeDef GPIO_Mode)的原函數。。
有愛(ài)好的能夠跳進(jìn)去看一下。不看也能夠。
翻開(kāi)HC89F_GPIO.H
拉倒最下面。有g(shù)pio的函數,能夠直接調用。


比方我們需求點(diǎn)亮一個(gè)led燈,調用這個(gè)函數就能夠了:
void GPIO_Write(GPIO_TypeDef GPIOx,u8 Value); //對一組端口賦值
看板子的原理圖:
程控直流電源系統單片機引腳連錯了該如何解決呢?

LED1連在HC89F003的P11腳,那我們點(diǎn)亮他就是讓P11腳為低電平就行了。
void main(void)
{
System_init(); //體系初始化
GPIO_Init(GPIOT1,GPIO_PIN_1, GPIO_MODE_OUT_PP); //P00設置為推挽輸出形式
GPIO_Write(GPIOT1,0xFD); //設置P11腳為低電平
while(1);
}
然后下載到程控直流電源體系單片機就行了,下載設置的那里,在HC-51LINK用戶(hù)手冊那里寫(xiě)的很具體。
各種裝備都寫(xiě)出來(lái)了。盡管說(shuō)有點(diǎn)費事,可是,教程很具體,請耐心看完,并且裝備完。芯圣是一個(gè)用心做產(chǎn)品的廠(chǎng)家。。。
還有我發(fā)現一個(gè)很特別的當地,這是曾經(jīng)我玩32/51都沒(méi)有的,那就是上拉電阻阻值巨細是能夠挑選的,可編程挑選,芯圣的產(chǎn)品又一次讓我驚奇
/**
* @闡明 設置P02端口上拉電阻阻值
* @參數 Res_Value : 電阻值
* R050K //上拉電阻50K
* R100K //上拉電阻100K
* R150K //上拉電阻150K
* R300K //上拉電阻300K
* @返回值 無(wú)
* @注 無(wú)
*/
調用這個(gè)函數就能夠了:
void GPIO_P02ExternalPullConfig(GPIO_PullResValve Res_Value)
{
P0LPU = (P0LPU&(~GPIO_P02PU))|(Res_Value&GPIO_P02PU);
}
Ex:
void main(void)
{
System_init(); //體系初始化
GPIO_Init(GPIOT0,GPIO_PIN_2,GPIO_MODE_IN_PU); //將P02端口設置為上拉電阻形式
GPIO_P02ExternalPullConfig(R100K); //將P02端口上拉電阻設置為100K
while(1);
}
就能夠將P02端口上拉電阻設置為100K
然后介紹一下HC89f003的重映射功用:
Datasheet介紹:
程控直流電源系統單片機引腳連錯了該如何解決呢?

讓我們看看怎樣重映射吧,我盡量簡(jiǎn)單明了講一下。
什么是重映射:
一般的程控直流電源體系單片機上有許多I/O口,也有許多的內置外設如I2C、ADC、ISP、USART等,為了節約引出管腳,這些內置外設根本上是與I/O口共用管腳的,也就是I/O管腳的復用功用。許多復用內置的外設的I/O引腳能夠經(jīng)過(guò)重映射功用,從不同的I/O管腳引出,即復用功用的引腳是可經(jīng)過(guò)程序改動(dòng)的。讀到這里信任我們都應該了解了端口重映射的一些概念了。原理上的東西不細說(shuō)了。我們能夠看手冊或許網(wǎng)上查,這方面的材料仍是許多的。
從芯圣的datasheet我們能夠知道,根本上一切的io口,都是能夠完結重映射的,那我們看看pwm輸出能映射到哪個(gè)io口呢,
PWM3_OUTPin_P00 = (u8)0x00, //PWM3輸出端口為P00
PWM3_OUTPin_P01 = (u8)0x01, //PWM3輸出端口為P01
PWM3_OUTPin_P02 = (u8)0x02, //PWM3輸出端口為P02
PWM3_OUTPin_P03 = (u8)0x03, //PWM3輸出端口為P03
PWM3_OUTPin_P04 = (u8)0x04, //PWM3輸出端口為P04
PWM3_OUTPin_P05 = (u8)0x05, //PWM3輸出端口為P05
PWM3_OUTPin_P06 = (u8)0x06, //PWM3輸出端口為P06
PWM3_OUTPin_P07 = (u8)0x07, //PWM3輸出端口為P07
PWM3_OUTPin_P10 = (u8)0x10, //PWM3輸出端口為P10
PWM3_OUTPin_P11 = (u8)0x11, //PWM3輸出端口為P11
PWM3_OUTPin_P20 = (u8)0x20, //PWM3輸出端口為P20
PWM3_OUTPin_P21 = (u8)0x21, //PWM3輸出端口為P21
PWM3_OUTPin_P22 = (u8)0x22, //PWM3輸出端口為P22
PWM3_OUTPin_P23 = (u8)0x23, //PWM3輸出端口為P23
PWM3_OUTPin_P24 = (u8)0x24, //PWM3輸出端口為P24
PWM3_OUTPin_P25 = (u8)0x25, //PWM3輸出端口為P25
PWM3_OUTPin_P26 = (u8)0x26, //PWM3輸出端口為P26
PWM3_OUTPin_P27 = (u8)0x27, //PWM3輸出端口為P27
這是從芯圣例程找出來(lái)的,我數了一下,一路pwm隨時(shí)在任何一個(gè)io口輸出。這就是一個(gè)重映射,不論你板子規劃怎樣接線(xiàn),只需銜接到io口,那么就能經(jīng)過(guò)引腳重映射功用,完結你需求的功用,給規劃電路帶來(lái)方便。
void main(void)
{
System_Init(); //體系初始化
GPIO_Init(GPIOT0,GPIO_PIN_1,GPIO_MODE_OUT_PP); //P01推挽輸出
PWM3_PinRemapConfig(PWM3_OUTPin_P01); //PWM3輸出映射P01口
PWM3_OutPutCmd(ENABLE); //輸出使能
//周期核算 = 0xff / (Fosc / PWM分頻系數) (Fosc見(jiàn)體系時(shí)鐘裝備的部分)
PWM3_Init(PWM3_HIGH_VALID,PWMCK_8); //PWM3高有用,時(shí)鐘為OSC時(shí)鐘8分頻
PWM3_PeriodConfig(0xff); //PWM3周期為0xFF
PWM3_DutyCycleConfig(0x55); //PWM3的占空比設置
PWM3_Cmd(ENABLE); //PWM3使能
while(1);
}
中心函數:PWM3_PinRemapConfig(PWM3_OutPin_TypeDef OutPin); //PWM3輸出管腳映射
直接調用就能夠了。
彌補一點(diǎn):
一路pwm重映射只能有一個(gè)引腳輸出pwm,我們不可能完結一切的io都輸出相同的pwm波,那豈不是逆天了嘛!!還有就是重映射也有優(yōu)先級的,這是要留意 的一點(diǎn)??墒俏矣幸粋€(gè)主意,就是分時(shí)復用。這個(gè)時(shí)間段P00口做usart_tx功用,等發(fā)送完,我又能夠輸出pwm,這樣不知道行不行,僅為筆者個(gè)人主意而已。

圖片加載中...

在線(xiàn)留言

◎歡迎您的留言,您也可以通過(guò)以下方式聯(lián)系我們:

◎客戶(hù)服務(wù)熱線(xiàn):021-51095123

◎郵箱:xin021@126.com

展開(kāi)