色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 分析初始化STM32串口后進(jìn)入發(fā)送完成中斷的現(xiàn)象

          分析初始化STM32串口后進(jìn)入發(fā)送完成中斷的現(xiàn)象

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          最近在調(diào)試STM32串口過程中發(fā)現(xiàn)一個(gè)奇怪的問題,初始化串口1口,使能串口發(fā)送完成中斷后,立刻就進(jìn)入了發(fā)送完成中斷,21ic論壇上也有同樣的問題討論,而香水版主并沒有解釋原因。為了徹底的搞明白產(chǎn)生這一現(xiàn)象的原因:我仔細(xì)的看了STM32手冊(cè)中的串口部分的介紹:

          以下是字符發(fā)送的配置過程,注意第6點(diǎn),在設(shè)置USART_CR1中的TE位時(shí),會(huì)發(fā)送一個(gè)空閑幀作為第一次數(shù)據(jù)發(fā)送,所以即便你執(zhí)行了USART_ClearFlag(USART1, USART_FLAG_TC); (這個(gè)函數(shù)肯定在空閑幀數(shù)據(jù)發(fā)送完成前執(zhí)行),所以當(dāng)空閑幀發(fā)送完后,就進(jìn)入發(fā)送完成中斷。

          配置步驟:
          1.通過在USART_CR1寄存器上置位UE位來激活USART
          2.編程USART_CR1的M位來定義字長(zhǎng)。
          3.在USART_CR2中編程停止位的位數(shù)。
          4.如果采用多緩沖器通信,配置USART_CR3中的DMA使能位(DMAT)。按多緩沖器通信中
          的描述配置DMA寄存器。
          5.利用USART_BRR寄存器選擇要求的波特率。
          6.設(shè)置USART_CR1中的TE位,發(fā)送一個(gè)空閑幀作為第一次數(shù)據(jù)發(fā)送。
          7.把要發(fā)送的數(shù)據(jù)寫進(jìn)USART_DR寄存器(此動(dòng)作清除TXE位)。在只有一個(gè)緩沖器的情況
          下,對(duì)每個(gè)待發(fā)送的數(shù)據(jù)重復(fù)步驟7。
          8.在USART_DR寄存器中寫入最后一個(gè)數(shù)據(jù)字后,要等待TC=1,它表示最后一個(gè)數(shù)據(jù)幀的
          傳輸結(jié)束。當(dāng)需要關(guān)閉USART或需要進(jìn)入停機(jī)模式之前,需要確認(rèn)傳輸結(jié)束,避免破壞
          最后一次傳輸。

          解決的辦法:
          方法一
          在執(zhí)行USART_ITConfig(USART1, USART_IT_TC, ENABLE); 之前,
          先延時(shí)一段時(shí)間,基本上比一個(gè)字符發(fā)送的時(shí)間長(zhǎng)一點(diǎn)就可以了,然后再執(zhí)行
          USART_ClearFlag(USART1, USART_FLAG_TC);

          方法二:
          在執(zhí)行USART_ITConfig(USART1, USART_IT_TC, ENABLE); 之前,
          USART_ClearFlag(USART1, USART_FLAG_TC);

          while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)
          {
          ; //等待空閑幀發(fā)送完成后再清零發(fā)送標(biāo)志
          }
          USART_ClearFlag(USART1,USART_FLAG_TC);

          本文引用地址:http://cafeforensic.com/article/201611/321357.htm


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉