㈠ 請問如何寫單片機的庫函數
你說的是3.0以上的固件庫嗎?
systeminit()函數在主程序中被rcc_configuration()函數調用,完成系統時鍾的配置功能。我看過這個函數的具體內容,是直接操作寄存器來完成配置。如果使用stm32f10x_rcc.c文件中的函數來完成時鍾配置,和systeminit()的順序和效果一樣。
當然,為了保證兼容性,使低版本固件庫寫的程序運行,就還有stm32f10x_rcc.c存在,像早期版本的rcc_configuration()函數就是使用這個文件中提供的函數來完成時鍾配置的。
補充:是的,systeminit()函數完成了時鍾初始化的功能。另外systick的使用也變簡單了,以前要幾個函數完成初始化,現在只要一個就行。
你看看3.0版本固件system_stm32f10x.c中的代碼是怎樣的吧。其中是對rcc寄存器直接賦值操作,和stm32f10x_rcc.c中相關的函數作用一樣。
如果在程序中要使用埠、外設等,由於這些東西需要時鍾才能工作,所以還是需要stm32f10x_rcc.c中的函數來完成時鍾的控制。
㈡ 單片機的函數有哪些比如中斷函數…求所有函數代碼
_crol_ 字元循環左移
_cror_ 字元循環右移
_irol_ 整數循環左移
_iror_ 整數循環右移
_lrol_ 長整數循環左移
_lror_ 長整數循環右移
_nop_ 空操作8051 NOP 指令
_testbit_ 測試並清零位8051 JBC 指令函數名: _crol_,_irol_,_lrol_
原 型: unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
舉例:
_crol_,_cror_:將char型變數循環向左(右)移動指定位數後返回
_testbit_: 相當於JBC bitvar測試該位變數並跳轉同時清除。
_chkfloat_: 測試並返回源點數狀態。
就是匯編中的子函數。
_crol_,_cror_:如果二進制數為01010101 那麼_crol_(1) 左移1位後將高位補低位。
結果10101010。
功 能:_crol_,_irol_,_lrol_以位形式將val 左移n 位,該函數與8051「RLA」指令相關,上面幾個函數不同於參數類型。
例:
#include <intrins.h>
main()
{
unsigned int y;
C-5 1 程序設計 37
y=0x00ff;
y=_irol_(y,4);
}
㈢ 如何讓用函數庫的函數單片機P1口的8個LED燈每次向右移動3位的流水燈效果
假如LED是共陰極接法,當P1=0b0000 0000;時全不亮,當P1=0b1111 1111;時全亮.
第一次全不亮,P1=0b0000 0000;
第二次亮1-2-3,P1=0b1110 0000;
第三次亮4-5-6,P1=0b0001 1100;
第四次亮7-8-1,P1=0b1000 0011;
第五次亮2-3-4,P1=0b0111 0000;
找到規律了嗎?
即每次給P1口的值和0b111做或運算,而且每次將0b111移位3位。
知道這個規律就可以在庫函數上增加運算,實現功能。
㈣ 能簡單說一下單片機庫函數與和寄存器嗎
簡單說就是庫函數就是通過函數的方式進行對寄存器的操作來實現原本應該直接操作寄存器實現的功能。。。。運營庫函數。有幾個好處。在庫函數里對你要負值給寄存器的值進行簡單驗證是否超越了取值范圍等。還有當你要操作的寄存器很多時一般比較難記住寄存器的地址,名稱等。用庫函數的時候就不用記住寄存器的地址了。。通過庫函數去操作就好了。。簡單點說就這些。。當然還有很多。。。。。
㈤ 請問一下單片機的 庫函數 怎麼做啊
去買一本Windows編程寶典,那上面介紹了一些庫函數,一般都是由專業的公司做的,你只能寫一些你自己的函數,放在一個文件中,再調用.
㈥ 求指導怎樣去看去熟悉STM32等單片機的庫函數和庫函數的操作
庫函數只是在初始化的時候方便了。重點還是要了解外設的工作流程,可以先找一個外設,像串口uart這種,知道要做什麼,在看常式函數怎樣實現的。其他外設的庫函數都是一個風格,從名字就能看出功能~~good luck,共勉~~
㈦ 51單片機庫函數哪來的
函數庫。
_詰テ_語言中直接調用庫函數即可,具體如下: #include。
㈧ 51單片機使用數學函數庫中的正弦函數 需要怎樣改
不建議直接用正弦函數,因為執行時間會很久,51單片機運算能力比較弱,一般都是用演算法計算高級函數的,為了執行時間以及效率高,通常都是把高級函數用另外的方法去做,例如你這里要計算y=sinx這個函數,顯然直接用庫函數是容易寫程序是容易,但是單片機執行就很慢(可能要算一秒才能出結果),如果你的精度不需要很高(例如精確到1度),你做表,把1度到90度的正弦值全部自己算出來,然後做成表,通過查表方法就可以得到結果,這樣雖然寫程序是麻煩,但是執行速度和效率都高。你應該是剛剛學習單片機的,不理解CPU底層,C語言雖然是很靈活,但是也要看是什麼CPU,是根據CPU選擇高效率的數據類型以及演算法。
㈨ AVR單片機函數庫avr/pgmspace.h 是啥意思啊,在程序中有啥作用
pgmspace.h是將數據保存在程序存儲器中的相關函數,有了這個頭文件,你可以定義一個數組,把這個數組保存在ROM中,而不是RAM中,調用時需要特殊的命令,具體可以參考GCC自帶的文檔。
現在版本的AVR Studio只要添加avr/io.h就可以了,但是需要在設置中選擇你所使用的單片機型號,編譯器自動選擇相應的頭文件。
㈩ STM32單片機庫函數問題
一般不行
必須要調用stm32f10x_rcc.c,SystemInit()只是將系統的時鍾幫你配置好,其實你也可以不調用它,你可以自己調用stm32f10x_rcc.c中的函數自己來配置,不過這樣的話就要記得配置好flash的等待周期,兩種方式之間沒什麼太大區別。另外一般你會需要開啟外設的時鍾或者其他一些功能就需要調用stm32f10x_rcc.c中的函數。
還有如果你使用的是3.2.0以上的庫的話,SystemInit()其實不需要你自己調用,startup_stm32f10x_XX.s中有這樣的代碼
Reset_Handler
LDR R0, =SystemInit
意思就是上電(Reset)後執行的第一段代碼就是SystemInit(),這是在main函數之前調用的,所以不需你自己再去調用了
SystemInit()在調用的時候要注意你自己板子上的外部晶振是多少,默認是25MHZ,如果你板子上的晶振的不是這么大的話,你需要修改stm32f10x.h裡面的HSE_Value
補充:system_stm32f10x.c里的函數的功能僅僅是完成系統時鍾的配置,如果你不使用任何外設或者用系統時鍾做其他用的話是可以不用stm32f10x_rcc.c
stm32f10x_rcc.c中的函數不僅僅是完成分頻倍頻的功能,還有開啟外設時鍾,檢測RCC中斷,配置RTC時鍾等功能,不是單單配置一個系統時鍾那麼簡單