<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 無中斷串口代碼

          STM32 無中斷串口代碼

          作者: 時間:2016-11-18 來源:網(wǎng)絡 收藏
          下面的代碼是我使用STM32庫編寫的串口輸出和讀取的代碼。

          1、串口初始化函數(shù):void USART_Ini(USART_TypeDef* USARTx,u16 buad)

          本文引用地址:http://www.ex-cimer.com/article/201611/315916.htm

          2、串口中斷開啟和關(guān)閉:USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)

          3、串口接收:u16 Getch(USART_TypeDef* USARTx)

          4、串口單個字符輸出:void Putch(USART_TypeDef* USARTx,u16 ch)

          5、串口輸出字符串:void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)

          #include "stm32f10x_lib.h"

          u16 RecDateBuffer[100];
          u16 RecLen;
          u8 SendDateBuffer[100];

          /*******************************************************************************
          * Function Name : Uart_Ini
          * Description : 串口初始化
          * Input :
          * Output : None
          * Return :
          *******************************************************************************/
          void USART_Ini(USART_TypeDef* USARTx,u16 buad)
          {
          USART_InitTypeDef USART_InitStructure;
          USART_ClockInitTypeDef USART_ClockIni;
          GPIO_InitTypeDef GPIO_InitStructure;

          /* Configure USART1 Tx (PA.09) as alternate function push-pull */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

          /* Configure USART1 Rx (PA.10) as input floating */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

          USART_InitStructure.USART_BaudRate = 9600; //串口波特率
          USART_InitStructure.USART_WordLength = USART_WordLength_8b; //串口數(shù)據(jù)長度
          USART_InitStructure.USART_StopBits = USART_StopBits_1; //串口停止位
          USART_InitStructure.USART_Parity = USART_Parity_No; //串口奇偶效驗位
          USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //串口模式,開始起發(fā)送和接收
          USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //串口硬件流

          USART_ClockIni.USART_Clock = USART_Clock_Disable;
          USART_ClockIni.USART_CPOL = USART_CPOL_Low;
          USART_ClockIni.USART_CPHA = USART_CPHA_2Edge;
          USART_ClockIni.USART_LastBit = USART_LastBit_Disable;

          USART_Init(USARTx,&USART_InitStructure);
          USART_ClockInit(USARTx,&USART_ClockIni);
          /* Enable USART1 */
          USART_Cmd(USARTx, ENABLE); //開啟串口X
          }
          /*******************************************************************************
          * Function Name : Getch
          * Description : 串口中斷開啟或關(guān)閉
          * Input : USARTx:x=串口號
          NewState: ENABLE開啟中斷,DISABLE關(guān)閉中斷
          * Output : None
          * Return :
          *******************************************************************************/
          void USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)
          {
          NVIC_InitTypeDef NVIC_InitStructure;
          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
          NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);

          if(NewState==ENABLE)
          {
          USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,ENABLE);
          }
          else
          {
          USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,DISABLE);
          }
          }
          /*******************************************************************************
          * Function Name : Getch
          * Description : 串口接收字符
          * Input : USARTx:x=串口號
          * Output : None
          * Return :
          *******************************************************************************/
          u16 Getch(USART_TypeDef* USARTx)
          {
          u16 ch;
          if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)
          {
          ch=USART_ReceiveData(USARTx);
          //return(ch);
          }
          return(ch);
          }
          /*******************************************************************************
          * Function Name : GetStr
          * Description : 接收字符串
          * Input : USARTx:x=串口號
          buffer:接收字符串數(shù)組
          * Output : None
          * Return :
          *******************************************************************************/
          void GetStr(USART_TypeDef* USARTx)
          {
          //u16 i;
          while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)
          {
          if(USART_GetFlagStatus(USARTx,USART_FLAG_ORE)==RESET)
          {
          if(RecLen<100)
          {
          RecDateBuffer[RecLen]=USART_ReceiveData(USARTx);
          RecLen++;
          }
          }
          }

          }
          /*******************************************************************************
          * Function Name : Putch
          * Description : 串口輸出一個字符
          * Input : USARTx:x=串口號
          ch:串口輸出的字符
          * Output : None
          * Return :
          *******************************************************************************/
          void Putch(USART_TypeDef* USARTx,u16 ch)
          {
          if(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==SET)
          {
          USART_SendData(USARTx,ch);
          }
          }
          /*******************************************************************************
          * Function Name : PutStr
          * Description : 串口輸出字符串
          * Input : USARTx:x=串口號
          SendBuf:串口輸出字符串
          Length:輸出長度
          * Output : None
          * Return :
          *******************************************************************************/
          void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)
          {
          u16 i;

          for(i=0;i
          {
          Putch(USARTx,SendBuf[i]);
          }
          }



          關(guān)鍵詞: STM32無中斷串

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();