找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1253|回复: 0
收起左侧

蓝牙通讯USART源码

[复制链接]
ID:341296 发表于 2018-5-30 12:38 | 显示全部楼层 |阅读模式
USART源码

单片机源程序如下:
  1. #include "usart.h"
  2. //The Data Buffer
  3. u8 Usart1_Buffer[DATABUFFER];
  4. u8 Usart1_Rx = 0;
  5. u8 Usart1_Tx = 0;
  6. u8 Usart1_Len=0;
  7. u8 Usart1_Sta=0;
  8. /**************************************
  9. * @brief Configures the SysTem Usart1 *
  10. * @param None                         *
  11. * @retval None                        *
  12. **************************************/
  13. void Usart1_Config(u32 baudrate)       
  14. {
  15.         GPIO_InitTypeDef GPIO_InitStructure;
  16.         USART_InitTypeDef USART_InitStructure;
  17.         NVIC_InitTypeDef NVIC_InitStructure;
  18.        
  19.         /*使能usart1的时钟 */
  20.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);
  21.    
  22.         /*复位USART1*/
  23.         USART_DeInit(USART1);
  24.        
  25.         /*引脚配置*/
  26.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  27.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  28.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  29.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  30.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  31.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  32.         GPIO_Init(GPIOA, &GPIO_InitStructure);                                  
  33.        
  34.         /*串口通讯配置*/
  35.         USART_InitStructure.USART_BaudRate = baudrate;
  36.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  37.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  38.         USART_InitStructure.USART_Parity = USART_Parity_No;
  39.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  40.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  41.         USART_Init(USART1, &USART_InitStructure);

  42.         /*Usart1的优先级设置,优先级:抢占优先级为0,响应优先级为1*/
  43.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  44.         /*抢占优先级设为0*/
  45.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
  46.         /*响应优先级为1*/
  47.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  48.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  49.         NVIC_Init(&NVIC_InitStructure);
  50.    
  51.         /*打开接收中断使能 */
  52.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  53.         USART_Cmd(USART1, ENABLE);
  54. }

  55. /**************************************
  56. * @brief Configures the SysTem Usart2 *
  57. * @param None                         *
  58. * @retval None                        *
  59. **************************************/
  60. void Usart2_Config(u32 baudrate)       
  61. {
  62.         GPIO_InitTypeDef GPIO_InitStructure;
  63.         USART_InitTypeDef USART_InitStructure;
  64.         NVIC_InitTypeDef NVIC_InitStructure;
  65.    
  66.         //使能usart2的时钟
  67.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  68.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  69.         USART_DeInit(USART2);

  70.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  71.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  72.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  73.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  74.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  75.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  76.         GPIO_Init(GPIOA, &GPIO_InitStructure);                          
  77.                                   
  78.         /*配置usart2参数*/
  79.         USART_InitStructure.USART_BaudRate = baudrate;
  80.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  81.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  82.         USART_InitStructure.USART_Parity = USART_Parity_No;
  83.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  84.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  85.         USART_Init(USART2, &USART_InitStructure);
  86.        
  87.         /*USART2的优先级设置,优先级为:抢占优先级为:0,响应优先级为:0*/
  88.         NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  89.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
  90.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  91.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  92.         NVIC_Init(&NVIC_InitStructure);

  93.         /*打开接收中断使能*/
  94.         USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);  
  95.         USART_Cmd(USART2, ENABLE);
  96. }

  97. /**************************************
  98. * @brief Configures the SysTem Usart3 *
  99. * @param None                         *
  100. * @retval None                        *
  101. **************************************/
  102. void Usart3_Config(u32 baudrate)       
  103. {
  104.         GPIO_InitTypeDef GPIO_InitStructure;
  105.         USART_InitTypeDef USART_InitStructure;
  106.         NVIC_InitTypeDef NVIC_InitStructure;
  107.    
  108.         /*使能usart3的时钟*/
  109.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  110.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  111.         USART_DeInit(USART3);

  112.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  113.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  114.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  115.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  116.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  117.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  118.         GPIO_Init(GPIOB, &GPIO_InitStructure);                          
  119.                                   
  120.         /*配置usart3参数*/
  121.         USART_InitStructure.USART_BaudRate = baudrate;
  122.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  123.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  124.         USART_InitStructure.USART_Parity = USART_Parity_No;
  125.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  126.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  127.         USART_Init(USART3, &USART_InitStructure);
  128.        
  129.         /*USART3的优先级设置,优先级为:抢占优先级为:1,响应优先级为:0*/
  130.         NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  131.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
  132.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  133.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  134.         NVIC_Init(&NVIC_InitStructure);

  135.         /*打开接收中断使能*/
  136.         USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);  
  137.         USART_Cmd(USART3, ENABLE);
  138. }

  139. /**************************************
  140. * @brief Configures the SysTem Usart4 *
  141. * @param None                         *
  142. * @retval None                        *
  143. **************************************/
  144. void Uart4_Config(u32 baudrate)       
  145. {
  146.         GPIO_InitTypeDef GPIO_InitStructure;
  147.         USART_InitTypeDef USART_InitStructure;
  148.         NVIC_InitTypeDef NVIC_InitStructure;
  149.    
  150.         /*使能uart4的时钟*/
  151.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
  152.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
  153.         USART_DeInit(UART4);

  154.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  155.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  156.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  157.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  158.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  159.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  160.         GPIO_Init(GPIOC, &GPIO_InitStructure);                          
  161.                                   
  162.         /*配置usart4参数*/
  163.         USART_InitStructure.USART_BaudRate = baudrate;
  164.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  165.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  166.         USART_InitStructure.USART_Parity = USART_Parity_No;
  167.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  168.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  169.         USART_Init(UART4, &USART_InitStructure);
  170.        
  171.         /*USART4的优先级设置,优先级为:抢占优先级为:1,响应优先级为:1*/
  172.         NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
  173.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
  174.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  175.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  176.         NVIC_Init(&NVIC_InitStructure);

  177.         /*打开接收中断使能*/
  178.         USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);  
  179.         USART_Cmd(UART4, ENABLE);
  180. }

  181. /**************************************
  182. * @brief Configures the SysTem Usart5 *
  183. * @param None                         *
  184. * @retval None                        *
  185. **************************************/
  186. void Uart5_Config(u32 baudrate)       
  187. {
  188.         GPIO_InitTypeDef GPIO_InitStructure;
  189.         USART_InitTypeDef USART_InitStructure;
  190.         NVIC_InitTypeDef NVIC_InitStructure;
  191.    
  192.         /*使能uart5的时钟*/
  193.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
  194.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);
  195.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
  196.         USART_DeInit(UART5);

  197.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  198.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  199.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  200.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  201.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  202.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  203.         GPIO_Init(GPIOD, &GPIO_InitStructure);                          
  204.                                   
  205.         /*配置usart5参数*/
  206.         USART_InitStructure.USART_BaudRate = baudrate;
  207.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  208.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  209.         USART_InitStructure.USART_Parity = USART_Parity_No;
  210.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  211.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  212.         USART_Init(UART5, &USART_InitStructure);
  213.        
  214.         /*USART5的优先级设置,优先级为:抢占优先级为:1,响应优先级为:2*/
  215.         NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
  216.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
  217.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  218.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  219.         NVIC_Init(&NVIC_InitStructure);

  220.         /*打开接收中断使能*/
  221.         USART_ITConfig(UART5,USART_IT_RXNE,ENABLE);  
  222.         USART_Cmd(UART5, ENABLE);
  223. }

  224. /********************************************************
  225. * @brief  This function handles Usart1 interrupt request*
  226. * @param  None                                          *
  227. * @retval None                                          *
  228. ********************************************************/
  229. void USART1_IRQHandler(void)
  230. {
  231.         /*产生中断 */     
  232.         if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
  233.         {  
  234.                 /*清楚中断标志   */
  235.         USART_ClearITPendingBit(USART1,USART_IT_RXNE);      
  236.                 Usart1_Buffer[Usart1_Rx] = USART_ReceiveData(USART2);         
  237.                 Usart1_Rx++;  
  238.         Usart1_Rx &= 0xFF;      
  239.         }  
  240.     if(Usart1_Buffer[Usart1_Rx-1] == 0x5A) //
  241.                 Usart1_Tx = Usart1_Rx-1;  
  242.     if((Usart1_Buffer[Usart1_Tx] == 0x5A)&&(Usart1_Buffer[Usart1_Rx-1] == 0xA5)) //
  243.         {  
  244.                 Usart1_Len = Usart1_Rx-1- Usart1_Tx; //      
  245.                 Usart1_Sta=1; //   
  246.         }  
  247.     if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET) //   
  248.         {  
  249.         USART_ClearFlag(USART1,USART_FLAG_ORE); //      
  250.                 USART_ReceiveData(USART1); //
  251.         }
  252.         /*if( Uart2_Sta )  
  253.         {
  254.                 for(tx2=0;tx2 <= Uart2_Len;tx2++,Uart2_Tx++)  
  255.                         USART2_SendByte(Uart2_Buffer[Uart2_Tx]); //      
  256.                 Uart2_Rx = 0; //         
  257.                 Uart2_Tx = 0;         
  258.                 Uart2_Sta = 0;  
  259.         }*/
  260.        
  261. }

  262. /********************************************************
  263. * @brief  This function handles Usart2 interrupt request*
  264. * @param  None                                          *
  265. * @retval None                                          *
  266. ********************************************************/
  267. void USART2_IRQHandler(void)
  268. {
  269. }

  270. /********************************************************
  271. * @brief  This function handles Usart3 interrupt request*
  272. * @param  None                                          *
  273. * @retval None                                          *
  274. ********************************************************/
  275. void USART3_IRQHandler(void)
  276. {
  277. }

  278. /********************************************************
  279. * @brief  This function handles Uart4 interrupt request.*
  280. * @param  None                                          *
  281. * @retval None                                          *
  282. ********************************************************/
  283. void UART4_IRQHandler(void)
  284. {
  285. }

  286. /********************************************************
  287. * @brief  This function handles Uart5 interrupt request.*
  288. * @param  None                                          *
  289. * @retval None                                          *
  290. ********************************************************/
  291. void UART5_IRQHandler(void)
  292. {
  293. }
复制代码

所有资料51hei提供下载:
usart通讯.zip (2.07 KB, 下载次数: 6)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表