网站导航: 首页 > 设计参考 > 正文 文章搜索
STM32 无中断串口代码
 
文章编号:
100808161046
文章分类: 单片机 STM8/STM32
点 击:
...
关 键 词: 串口
文章来源:
http://www.stmcu.org
摘 要:
串口,是我们日常使用最多的一部分,刚开始做电子工程师的,基本都是从这个开始的,下面的代码是我使用STM32库编写的串口输出和读取的代码...

串口,是我们日常使用最多的一部分,刚开始做电子工程师的,基本都是从这个开始的,下面的代码是我使用STM32库编写的串口输出和读取的代码。

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

2、串口中断开启和关闭: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)
 

 
  1. #include "stm32f10x_lib.h"   
  2.   
  3. u16 RecDateBuffer[100];   
  4. u16 RecLen;   
  5. u8 SendDateBuffer[100];   
  6.   
  7. /*******************************************************************************  
  8. * Function Name  : Uart_Ini  
  9. * Description    : 串口初始化  
  10. * Input          :  
  11. * Output         : None  
  12. * Return         :  
  13. *******************************************************************************/  
  14. void USART_Ini(USART_TypeDef* USARTx,u16 buad)   
  15. {   
  16.    USART_InitTypeDef USART_InitStructure;   
  17.    USART_ClockInitTypeDef USART_ClockIni;   
  18.    GPIO_InitTypeDef GPIO_InitStructure;   
  19.   
  20.    /* Configure USART1 Tx (PA.09) as alternate function push-pull */  
  21.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;   
  22.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   
  23.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  24.    GPIO_Init(GPIOD, &GPIO_InitStructure);   
  25.       
  26.    /* Configure USART1 Rx (PA.10) as input floating */  
  27.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;   
  28.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   
  29.    GPIO_Init(GPIOD, &GPIO_InitStructure);   
  30.   
  31.    USART_InitStructure.USART_BaudRate = 9600;      //串口波特率    
  32.    USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //串口数据长度   
  33.    USART_InitStructure.USART_StopBits = USART_StopBits_1;   //串口停止位   
  34.    USART_InitStructure.USART_Parity = USART_Parity_No;    //串口奇偶效验位   
  35.    USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //串口模式,开始起发送和接收   
  36.    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //串口硬件流   
  37.   
  38.    USART_ClockIni.USART_Clock = USART_Clock_Disable;   
  39.    USART_ClockIni.USART_CPOL = USART_CPOL_Low;   
  40.    USART_ClockIni.USART_CPHA = USART_CPHA_2Edge;   
  41.    USART_ClockIni.USART_LastBit = USART_LastBit_Disable;   
  42.   
  43.    USART_Init(USARTx,&USART_InitStructure);   
  44.    USART_ClockInit(USARTx,&USART_ClockIni);    
  45.    /* Enable USART1 */  
  46.   USART_Cmd(USARTx, ENABLE);  //开启串口X   
  47. }   
  48. /*******************************************************************************  
  49. * Function Name  : Getch  
  50. * Description    : 串口中断开启或关闭  
  51. * Input          : USARTx:x=串口号  
  52.                    NewState: ENABLE开启中断,DISABLE关闭中断  
  53. * Output         : None  
  54. * Return         :  
  55. *******************************************************************************/  
  56. void USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)   
  57. {   
  58.     NVIC_InitTypeDef NVIC_InitStructure;   
  59.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   
  60.     NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;   
  61.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;   
  62.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;   
  63.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   
  64.     NVIC_Init(&NVIC_InitStructure);      
  65.      
  66.    if(NewState==ENABLE)   
  67.    {   
  68.      USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,ENABLE);   
  69.    }   
  70.    else  
  71.    {   
  72.      USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,DISABLE);   
  73.    }   
  74. }   
  75. /*******************************************************************************  
  76. * Function Name  : Getch  
  77. * Description    : 串口接收字符  
  78. * Input          : USARTx:x=串口号  
  79. * Output         : None  
  80. * Return         :  
  81. *******************************************************************************/  
  82. u16 Getch(USART_TypeDef* USARTx)   
  83. {   
  84.    u16 ch;   
  85.    if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)   
  86.    {   
  87.      ch=USART_ReceiveData(USARTx);   
  88.   //return(ch);   
  89.    }   
  90.    return(ch);    
  91. }   
  92. /*******************************************************************************  
  93. * Function Name  : GetStr  
  94. * Description    : 接收字符串  
  95. * Input          : USARTx:x=串口号  
  96.        buffer:接收字符串数组  
  97. * Output         : None  
  98. * Return         :  
  99. *******************************************************************************/  
  100. void GetStr(USART_TypeDef* USARTx)   
  101. {   
  102.     //u16 i;   
  103.  while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)   
  104.  {   
  105.    if(USART_GetFlagStatus(USARTx,USART_FLAG_ORE)==RESET)   
  106.    {   
  107.       if(RecLen<100)   
  108.    {   
  109.      RecDateBuffer[RecLen]=USART_ReceiveData(USARTx);   
  110.         RecLen++;   
  111.    }   
  112.    }   
  113.  }   
  114.   
  115. }   
  116. /*******************************************************************************  
  117. * Function Name  : Putch  
  118. * Description    : 串口输出一个字符  
  119. * Input          : USARTx:x=串口号  
  120.        ch:串口输出的字符  
  121. * Output         : None  
  122. * Return         :  
  123. *******************************************************************************/  
  124. void Putch(USART_TypeDef* USARTx,u16 ch)   
  125. {   
  126.    if(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==SET)   
  127.    {   
  128.      USART_SendData(USARTx,ch);   
  129.    }   
  130. }   
  131. /*******************************************************************************  
  132. * Function Name  : PutStr  
  133. * Description    : 串口输出字符串  
  134. * Input          : USARTx:x=串口号  
  135.        SendBuf:串口输出字符串  
  136.        Length:输出长度  
  137. * Output         : None  
  138. * Return         :  
  139. *******************************************************************************/  
  140. void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)   
  141. {   
  142.   u16 i;   
  143.   
  144.   for(i=0;i   
  145.   {   
  146.     Putch(USARTx,SendBuf[i]);   
  147.   }   
  148. }   
  149.   
  150. /*************************************** E N D **********************************************/  
  151.   

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4