相關經驗及心得如下:
摘要:1.在配置usart的tx完成中斷後,在沒有發數的情況下自動進入tx完成中斷函式。2 .在tx配置完成後,相應的tc標誌位會自動置1,隨後就進入了tx完成中斷。3.相關配置程式編寫無誤,並已經開啟時鐘,依舊無法配置相關gpio及外設;4.adc通道:分為規則組和注入組;5.修改定時器的預裝值後,定時器不能立刻修改。
一、 usart tx中斷配置
問題描述:
在配置usart的tx完成中斷後,在沒有發數的情況下自動進入tx完成中斷函式。
1問題分析:
在tx配置完成後,相應的tc標誌位會自動置1,隨後就進入了tx完成中斷。
1(tc標誌位:傳送完成標誌位 )
當包含有資料的一幀傳送完成後,由硬體將該位置位。如果usart_cr1中的tcie為1,則產生中斷。由軟體序列清除該位(先讀usart_sr,然後寫入usart_dr)。tc位也可以通過寫入0來清除,只有在多快取通訊中才推薦這種清除程式。
0:傳送還未完成;
1:傳送完成成。
解決方法:
a) 方案一: 先讀狀態暫存器(usart_sr) ,然後再dr傳送暫存器中寫數,tc標誌位自動清除;
1/** 用於清除tc標誌位**/
usart_getflagstatus(usart1, usart_it_tc);
usart1->dr=0x00;12
3b) 方案二:強行將sr暫存器的tc位寫0,但是在實際執行過程中tc標誌位不能立刻清零,需要增加乙個延遲函式,才能使得tc標誌位清零;
14.其他補充
無二、gpio及外設配置無效
解決方法:
在配置gpio及外設之前就應該將開啟相應的時鐘;
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa,enable); //首先應該開啟時鐘
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa,enable); //首先應該開啟時鐘
/** tx --pa9 **/
gpioinitstruct.gpio_mode= gpio_mode_af_pp;
gpioinitstruct.gpio_pin= gpio_pin_9;
gpioinitstruct.gpio_speed= gpio_speed_50mhz;
gpio_init(gpioa,&gpioinitstruct);12
3456
7三、 adc通道
adc通道:分為規則組和注入組
規則組:每次轉換n個,直至所轉換結束,無***t標誌位;
注入組:每次轉換乙個,直至完成所有組員,有***t標誌位;
四、 dma通道配置
1、 問題描述:
配置的變數,在未修改的情況下改變;
2、問題分析:
變數在未修改的情況下改動,懷疑資料存在溢位,可能是因為指標、dma配置有關。由於本次測試程式中沒有運用資料指標,懷疑是dma配置問題,檢視dma配置,發現
dma_initstruct.dma_buffersize =( dmatxlengthsizeof(int));
/緩衝大小配置成資料所需要的的快取空間大小,但實際這個函式配置的是資料的個數。上述的配置就導致了dma的傳輸通道增加,指向了錯誤的變數位址;*/1
2343、解決方法
dma_initstruct.dma_buffersize =dmatxlength;
14、深入思考
dma在某些情況下可以想象成運用指標直接給變數賦值、陣列賦值等,因此在使用直接訪問記憶體位址過程中要明確清晰的知道所指向的位址、該位址中對應資料所佔空間的大小、所需要指向的資料個數等。盡量避免指標指錯的現象。在某些使用dma傳輸的資料,這些資料往往只隨著源資料的變化而變化,在後續的資料呼叫中很少進行額外的改動,因此,在處理目的資料的時候,增加 const關鍵字進行修飾,可以有效的防止目的資料的意外更改。
1五、 定時器pwm輸出
1、問題描述:
修改定時器的預裝值後,定時器不能立刻修改。
2、問題分析:
在**過程中檢視暫存器,在修改預裝值後暫存器的配置沒有改變,而是完成一次後才做修改的。於是檢視手冊,需要修改相應暫存器 捕獲/比較模式暫存器 2(timx_ccmr2) 中的ocxpe和ocxfe。
1位3 oc3pe:輸出比較3預裝載使能
位2 oc3fe:輸出比較3快速使能
3、解決方法:
直接運用指標修改暫存器相應的位的數值。
tim3->ccmr2= tim3->ccmr2|0x0004; //將oc3fe置1
tim3->ccmr2= tim3->ccmr2&0xfff7; //將oc3pe清零
tim3->ccr3 = (u16) 0*00; //向預裝暫存器寫值(ccr3暫存器)
STM32經驗心得(一)
摘要 1.在配置usart的tx完成中斷後,在沒有發數的情況下自動進入tx完成中斷函式。2 在tx配置完成後,相應的tc標誌位會自動置1,隨後就進入了tx完成中斷。3.相關配置程式編寫無誤,並已經開啟時鐘,依舊無法配置相關gpio及外設 4.adc通道 分為規則組和注入組 5.修改定時器的預裝值後,...
STM32除錯PID心得
近來從機械轉為電子開始除錯底盤,底盤的控制程式已寫好,我要做的工作主要是調引數。看過很多pid的書,理論基本一樣響應慢就加大p值,而在速度控制中基本都不用d即微分,因為電機速度太快了,d值起不了作用的。相應的誤差較大時則增大i值。道理就是這麼個理兒。但可能很多人都不知道p值是有兩個的乙個加速用,乙個...
STM32學習心得(1)
學stm32的目的只是為了可以讓乙個電機轉動起來,哈哈哈是不是感覺沒什麼大目標。但是能讓電機轉起來就覺得很有成就感。我在學之前有的概念就是 pwm,can,輸入輸出啥的,然而卻並不知道是幹什麼的。前一段時間在 上買了一款stmf103的板子,買回來後裝了keil4花了好幾個小時,又花了好幾個小時配置...