1樓:
spi匯流排建議你使用stm32內建的spi匯流排,網上有很多例程。如果你一定要模擬也是可以的。
iic匯流排一直是stm32的詬病,用模擬匯流排更安全一些。
一般的io口都可以配置成你說的四種模式的任意一種,而且程式設計過程中可以隨時進行轉換。
有些腳只能設定成輸出或者輸入,比如osc32的in,out做普通io使用時就是如此。
這些在stm32的datasheet的引腳部分中都有詳細說明。
iic匯流排clk要用推輓,資料匯流排在送出訊號時設定成推輓,
輸入如果沒有上拉電阻時配置成上拉輸入,有上拉則配置成浮空輸入。
spi匯流排的clk,cs,mosi腳設定成推輓,miso腳配置成上拉輸入。
2樓:匿名使用者
/* spi1 初始化 */
void spi1_configuration(void)
spi口我的配置是gpio_mode_af_pp 測試已過
i2c 我用得是io口模擬的 沒去折騰
gpio_initstructure.gpio_pin = gpio_pin_6 | gpio_pin_7;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_out_od;
利用stm32的兩個引腳接收資料
3樓:匿名使用者
同樣感覺問題不大清楚,如果微控制器上的那兩個引腳的協議確定,那麼就接到內stm32上的相應外設引腳容即可,然後設定下雙方工作模式。如果確定是兩根線,那麼iic的可能性大一些(不過要查下iic的匯流排時序,看看是否與描述的一致),畢竟標準spi要miso,mosi,clk與cs四根線。其他的序列通訊暫時能想到的都是非同步的了。
如果協議不確定,只是想分析協議與資料,那麼最好的方式是使用邏輯分析儀。
如果這種情況下仍然想要使用stm32來分析,只能使用io口中斷或定時器捕捉模式來分析協議。如果只是只想要資料的話,可以用io中斷,再每個微控制器clk的上升沿觸發中斷,在isr中把另一個io口採集到的資料儲存並移位(要注意msb在前還是lsb在前,spi是msb在前),採集完8個後處理。不過這樣肯定會做累的半死。
所有的時序,都要處理好了。還要考慮到各種出錯的可能性。
當然如果後面的描述正確的話,可以嘗試使用spi協議(spi規定是msb在前,要對應好了)但是需要微控制器上一根額外的引腳作為片選接到stm32上,或者想其他辦法把片選接上,stm32作為從機使用mosi線,,設定下相位和極性即可。
4樓:匿名使用者
你的問題不bai是太清楚:
1. 是stm32要讀du取微控制器上面的資料zhi嗎?dao可以使用很多協議,但是回要先確定哪一方主動,
答如果是微控制器主動發,那stm32最好用中斷,微控制器方根據需要或者定時傳送;如果是stm32主動讀,那stm32可以根據需要或者定時讀,微控制器則採用中斷接收。只要雙方匹配,根據你資料的實時程度,不難確定哪方主動。由於你只有兩個口建議用i2c,spi當然也可以,實現的方式可以手動模擬協議,也可以利用晶片內建的協議模組。
2. 「時鐘大概是4us一個週期,資料是8位.,時鐘的上升沿時獲取資料引腳的一位資料」 這個要求是微控制器的要求還是stm32的要求?為什麼會有這樣的要求?
stm32中pwm的佔空比,如何設定stm32中pwm的佔空比為20 ?
首先,確定timx的時鐘,除非apb1的時鐘分頻數設定為1,否則通用定時器timx的時鐘是apb1時鐘的2倍,這時的timx時鐘為72mhz,用這個timx時鐘72mhz除以 psc 1 得到定時器每隔多少秒漲一次,這裡給psc賦7199,計算得定時器每隔0.0001秒漲一次,即此時頻率為10khz...
stm32標頭檔案stm32f10x h中那麼多0x0001不
當然不會,他確實給好多巨集定義裡的名字都給賦0x0001但是這些定義最終就是為了方便讀程式,如 define gpioa 0x0001 define gpiob 0x0002又定義了 define gpio pin 0 0x0001 define gpio pin 1 0x0002假設你在你的程式要...
求教高手STM32中SDIO DMA模式的中斷設定問題
愛來聚海的風暴 不是4個埠,而是用4位元的方式來傳輸資料。其實sd都支援spi方式,這種方式下,只有1個bit來傳輸,會很慢,因此4bit就快了。具體提現在stm32因為有內部sd控制器,因此他可以支援這種4bits模式。就是你說的diskio.c檔案中的read write會利用這個 stm32 ...