STC8H8K64U学习(自用)
智能車競賽用到的是STC8H8K64U的芯片,編好的庫用的買芯片附帶的歷程,逐飛科技。記錄一下學習過程中遇到的問題及對應解決方案。
一、閱讀芯片手冊
1.STC8H系列芯片的封裝
我的理解是STC8H是個核心板,然后將它裝在基板上,這里用的是LQFP64封裝,由此產生了封裝圖(管腳圖),可以從圖中看到每個管腳的作用。
我買的是64PIN的,意思是有64個引腳。
二、閱讀同學的代碼
1.文件命名
(1)isr.c、isr.h:
表示里面裝的代碼是關于“中斷”的。
(2)exit.c、exit.h:
表示里面是main中編寫用到的所有自定義函數。
exit.h里面全是自定義的函數void匯總。
(3).c與.h
.c是代碼本身,.h是管腳的定義
(4)#include “headfile.h”
表示引用自帶的所有庫
(5)所有自定義函數匯總
board.c:board_init、DisableGlobalIRQ、EnableGlobalIRQ
spi.c:spi_init、spi_change_pin、spi_change_mode
iic.c:iic_init、iic_change_pin
uart.c:uart_init、uart_putchar、uart_putbuff、uart_putstr
add.c:adc_init
tim.c:ctimer_count_init、ctimer_count_clean、pit_timer_ms
pwm.c:pwm_set_gpio、pwm_init、pwm_duty、pwm_freq
exit.c:exit_init
gpio.c:gpio_pull_set、gpio_mode
eeprom.c:iap_init、iap_set_tps、iap_read_bytes、iap_write_bytes、iap_erase_page、extern_iap_write_bytes
delay.c:delay_init、delay_ms、delay_us
nvic.c:NVIC_SetPriority
自定義(沒在庫函數中的):pin_init、SpeedCtrl、
2.管腳定義
(1)光電傳感器
管腳P7.0、P7.1、P7.2
(2)超聲波傳感器
管腳P1.1
(3)直流電機
P2.0左邊電機輸入,P2.1左邊電機輸出
P2.2右邊電機輸入,P2.3右邊電機輸出
3.不懂的概念
(1)#ifndef,防止頭文件被多重調用
CSDN上對應描述
(2)進制轉換用——程序員計算器
例如0x80,0x表示這是十六進制,那么我們進入程序員計算器選擇HEX(十六進制模式),輸入“80”,得到需要的二進制
1 0 0 0 0 0 0 0
CSDN關于程序員計算器的講解
(3)紅外傳感器是光電傳感器的一種,別再問兩者區別了,包含關系。
(4)sbit與define:
define是一個宏的替換,相當于改名
sbit是定義一個管腳
關于兩者的進一步討論
**(5)使能:一個“允許信號”,不使能表示不允許。baidu的定義
(6)懸空、高阻態:懸空指不接任何元器件;高阻態指無上下拉電阻,是除了輸入、輸出外的另一種狀態,相當于斷路
(7)MCU:指單片機
(8)什么叫“過放”:過放,簡單來說,電池電壓降到截止電壓后還在降,過度釋放了。
過放的百度知道
(9)什么叫:串口使用定時器做波特率發生器:
4.讀同學代碼遇到的問題
(1)I/O的引腳模式
gpio_mode(P7_0,GPI_IMPEDANCE);此芯片:I/O除了P3.0和P3.1外,其他所有的I/O口在上電后默認是高阻輸入狀態,所以手冊里要求用戶在使用I/O前必須要設置I/O的模式。
GPIO:準雙向口
GPO_PP:推挽輸出
GPI_IMPEDANCE:高阻輸入
GPI_OD:開漏輸出
在開始解釋這四個概念前,可以先將它們分類,“準雙向口”是輸入與輸出,高阻輸入只輸入,另外兩個是輸出,相當于一共有三類。
準雙向口:首先要明白準雙向I/O口的意思,很多處理器的引腳可以設置為雙向端口,雙向端口的要求就是可輸入與輸出。
對于51單片機而言,所以的I/O口直接就是準雙向I/O口,而反觀stm32內核的單片機,它的I/O的模式是需要自己設置的,準雙向口是其中的一種,設置后就可以等效于51單片機中的I/O了。
其實質用的是一個弱上拉電阻,在輸入IO的情況下,無法做到完全的只有輸入沒有輸出,才形成了既有輸入又有輸出的情況。
高阻輸入:從手冊上講,高阻輸入就是“電流既不能流入,也不能流出”,有點感覺像高阻態了
為什么這樣做:是為了對于不用的I/O讓它不對用的產生干擾
推挽輸出:(專業解釋)推挽輸出的結構是由兩個三極管或者MOS管受到互補信號的控制,兩個管子始終保持一個處于截止,另一個處于導通的狀態。
好處:基本上可以真正做到輸出高低電平,且都有驅動力,而且這個驅動力強于開漏輸出。
缺點:多個使用時,如果要高電平與低電平混用的話,非常容易短路
開漏輸出:與推挽輸出想對應,但是無法實現真正的輸出高電平,低電平是可以的,在輸出高電平時會面臨驅動力不足的情況,所以需要借助外部的上拉電阻去實現真正的輸出高電平
好處:電平轉換容易,主要是那個上拉電阻在起作用,你放哪,哪就是高電平,以及,可實現“線與”
什么叫線與:所謂的"線與"指的是多個信號線直接連接在一起,只有當所有信號全部為高電平時,合在一起的總線為高電平;只要有任意一個或者多個信號為低電平,則總線為低電平。
復習材料一:GPIO引腳模式
復習材料二:GPIO輸入輸出各種模式(推挽、開漏、準雙向端口)詳解
復習材料三:關于stm32單片機準雙向IO口配置
(2)為什么要設置上拉電阻
gpio_pull_set(P7_0,PULLUP);因為有時候默認的電平情況是不清楚的,外部經過一個上拉電阻再接VCC,那么相應的引腳就為高電平,所以說是用于確定狀態的。
①上下拉電阻作用:
上拉電阻可以讓電平穩定在高電平,下拉電阻可以讓電平穩定在低電平 ,同時提高電路抗干擾性
②不用會怎樣:
應該是電路的驅動能力不足,單片機無法準確執行用戶的要求
資料一:stm32設置內部上拉電阻_比較全面的電阻上、下拉介紹
資料二:上下拉電阻作用
(3)電機上的編碼器,通過編碼器調節電機轉速
資料一:STM32直流減速電機控制篇(一)PWM調速
資料二:STM32直流減速電機控制篇(二)編碼器測速原理
資料三:STM32直流減速電機控制篇(三)編碼器測速程序編寫
資料四:STM32與PC串口通信 實現步進電機轉速可調 程序及調試過程分享
(4)為什么要用定時器進行初始化實現外部計數
編碼器采集數據要通過定時器作為外部計數;
總結
以上是生活随笔為你收集整理的STC8H8K64U学习(自用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UTF-8编码下\u7528\u6237
- 下一篇: 西游记中会七十二变的三个人