日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]相關(guān)經(jīng)驗及心得如下: 摘要:1.在配置USART的TX完成中斷后,在沒有發(fā)數(shù)的情況下自動進入TX完成中斷函數(shù)。2 .在TX配置完成后,相應(yīng)的TC標(biāo)志位會自動置1,隨后就進入了TX完成中斷。3.相關(guān)配置程序編寫無誤,并已經(jīng)開啟

相關(guān)經(jīng)驗及心得如下: 
摘要:1.在配置USART的TX完成中斷后,在沒有發(fā)數(shù)的情況下自動進入TX完成中斷函數(shù)。2 .在TX配置完成后,相應(yīng)的TC標(biāo)志位會自動置1,隨后就進入了TX完成中斷。3.相關(guān)配置程序編寫無誤,并已經(jīng)開啟時鐘,依舊無法配置相關(guān)GPIO及外設(shè);4.ADC通道:分為規(guī)則組和注入組;5.修改定時器的預(yù)裝值后,定時器不能立刻修改。

一、 USART TX中斷配置1. 問題描述:
在配置USART的TX完成中斷后,在沒有發(fā)數(shù)的情況下自動進入TX完成中斷函數(shù)。
2. 問題分析:
在TX配置完成后,相應(yīng)的TC標(biāo)志位會自動置1,隨后就進入了TX完成中斷。

(TC標(biāo)志位:發(fā)送完成標(biāo)志位 )
當(dāng)包含有數(shù)據(jù)的一幀發(fā)送完成后,由硬件將該位置位。如果USART_CR1中的TCIE為1,則產(chǎn)生中斷。由軟件序列清除該位(先讀USART_SR,然后寫入USART_DR)。TC位也可以通過寫入0來清除,只有在多緩存通訊中才推薦這種清除程序。
0:發(fā)送還未完成;
1:發(fā)送完成成。

3. 解決方法:
a)方案一:先讀狀態(tài)寄存器(USART_SR),然后再DR發(fā)送寄存器中寫數(shù),TC標(biāo)志位自動清除;
/**用于清除TC標(biāo)志位**/USART_GetFlagStatus(USART1,USART_IT_TC);USART1->DR=0x00;123
b)方案二:強行將SR寄存器的TC位寫0,但是在實際運行過程中TC標(biāo)志位不能立刻清零,需要增加一個延遲函數(shù),才能使得TC標(biāo)志位清零;

4.其他補充

二、GPIO及外設(shè)配置無效1. 問題描述:

相關(guān)配置程序編寫無誤,并已經(jīng)開啟時鐘,依舊無法配置相關(guān)GPIO及外設(shè);

2. 問題分析:

在調(diào)試過程運用IAR查看單片機相關(guān)的寄存器狀態(tài),發(fā)現(xiàn)相應(yīng)的寄存器在運行配置程序后仍然沒有反應(yīng),懷疑可能相應(yīng)外設(shè),沒有啟動,分析原因可能是沒有時鐘。

3. 解決方法:

在配置GPIO及外設(shè)之前就應(yīng)該將開啟相應(yīng)的時鐘;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //首先應(yīng)該開啟時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//首先應(yīng)該開啟時鐘/**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);1234567
三、 ADC通道

ADC通道:分為規(guī)則組和注入組

規(guī)則組:每次轉(zhuǎn)換n個,直至所轉(zhuǎn)換結(jié)束,無SEXT標(biāo)志位;

注入組:每次轉(zhuǎn)換一個,直至完成所有組員,有SEXT標(biāo)志位;

四、 DMA通道配置1、 問題描述:

配置的變量,在未修改的情況下改變;

2、問題分析:

變量在未修改的情況下改動,懷疑數(shù)據(jù)存在溢出,可能是因為指針、DMA配置有關(guān)。由于本次測試程序中沒有運用數(shù)據(jù)指針,懷疑是DMA配置問題,查看DMA配置,發(fā)現(xiàn)

DMA_InitStruct.DMA_BufferSize=(DMATXLENGTH*sizeof(int));/*緩沖大小配置成數(shù)據(jù)所需要的的緩存空間大小,但實際這個函數(shù)配置的是數(shù)據(jù)的個數(shù)。上述的配置就導(dǎo)致了DMA的傳輸通道增加,指向了錯誤的變量地址;*/1234
3、解決方法
DMA_InitStruct.DMA_BufferSize=DMATXLENGTH;1
4、深入思考
DMA在某些情況下可以想象成運用指針直接給變量賦值、數(shù)組賦值等,因此在使用直接訪問內(nèi)存地址過程中要明確清晰的知道所指向的地址、該地址中對應(yīng)數(shù)據(jù)所占空間的大小、所需要指向的數(shù)據(jù)個數(shù)等。盡量避免指針指錯的現(xiàn)象。在某些使用DMA傳輸?shù)臄?shù)據(jù),這些數(shù)據(jù)往往只隨著源數(shù)據(jù)的變化而變化,在后續(xù)的數(shù)據(jù)調(diào)用中很少進行額外的改動,因此,在處理目的數(shù)據(jù)的時候,增加const關(guān)鍵字進行修飾,可以有效的防止目的數(shù)據(jù)的意外更改。
五、 定時器PWM輸出1、問題描述:

修改定時器的預(yù)裝值后,定時器不能立刻修改。

2、問題分析:
在仿真過程中查看寄存器,在修改預(yù)裝值后寄存器的配置沒有改變,而是完成一次后才做修改的。于是查看手冊,需要修改相應(yīng)寄存器捕獲/比較模式寄存器2(TIMx_CCMR2)中的OCxPE和OCxFE。

位3 OC3PE:輸出比較3預(yù)裝載使能
位2 OC3FE:輸出比較3快速使能

3、解決方法:

直接運用指針修改寄存器相應(yīng)的位的數(shù)值。

TIM3->CCMR2=TIM3->CCMR2|0x0004;//將OC3FE置1TIM3->CCMR2=TIM3->CCMR2&0xfff7;//將OC3PE清零TIM3->CCR3=(u16)0*00;//向預(yù)裝寄存器寫值(CCR3寄存器)123


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉