串口初始化

  1. #include "usart5.h"
  2.  
  3. vu16 UART5_RX_STA=0;
  4. char UART5_RX_BUF[UART5_REC_LEN];
  5. u8 UART5_TX_BUF[UART5_MAX_SEND_LEN];
  6.  
  7. extern unsigned char send_flag,Return;
  8. extern unsigned char uart5_flag0;
  9. extern unsigned int bufj;
  10. void usart5_Init(u32 bound)
  11. {
  12. GPIO_InitTypeDef GPIO_InitStructure;
  13. USART_InitTypeDef USART_InitStructure;
  14. NVIC_InitTypeDef NVIC_InitStructure;
  15.  
  16. RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE); //ʹÄÜUART5£¬GPIOCʱÖÓ
  17. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  18. // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19. // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  20. // GPIO_Init(GPIOD, &GPIO_InitStructure);//³õʼ»¯
  21. // GPIO_SetBits(GPIOD,GPIO_Pin_1); //
  22.  
  23. //UART5_TX
  24. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  25. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  26. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
  27. GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯
  28.  
  29. //UART5_RX
  30. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  31. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
  32. GPIO_Init(GPIOD, &GPIO_InitStructure);//³õʼ»¯
  33.  
  34. //Uart5 NVIC ÅäÖÃ
  35. NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
  36. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//ÇÀÕ¼ÓÅÏȼ¶2
  37. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×ÓÓÅÏȼ¶1
  38. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ
  39. NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
  40.  
  41. //UART5 ³õʼ»¯ÉèÖÃ
  42. USART_InitStructure.USART_BaudRate = bound;//´®¿Ú²¨ÌØÂÊ
  43. USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
  44. USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
  45. USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
  46. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
  47. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê½
  48.  
  49. USART_Init(UART5, &USART_InitStructure); //³õʼ»¯´®¿Ú5
  50. USART_ITConfig(UART5,USART_IT_IDLE,ENABLE);
  51. USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);//¿ªÆô´®¿Ú½ÓÊÜÖжÏ
  52. // TIM7_Int_Init(99,7199); //10msÖжÏ
  53. // UART5_RX_STA=0;
  54. USART_Cmd(UART5, ENABLE); //ʹÄÜ´®¿Ú4
  55. delay_FOR(1000);
  56. }
  57.  
  58. char NUMFind[200]={0};
  59. int NUNFind_cnt = 0;
  1. void Uart5_Char(unsigned char ch)
  2. {
  3. while(USART_GetFlagStatus(UART5,USART_FLAG_TC)==RESET);
  4. USART_SendData(UART5,ch);
  5. }
  6.  
  7. void Uart5_SendFIFO(unsigned char cmd[],unsigned int Len)
  8. {
  9. unsigned char i;
  10. while((UART5->SR & 0x40)==0);
  11. for(i=0;i<Len;i++)
  12. {
  13. UART5->DR = cmd[i];
  14. while((UART5->SR & 0x40)==0);
  15. }
  16. }
  17.  
  18. void u5_printf(char* fmt,...)
  19. {
  20. u16 i,j;
  21. va_list ap;
  22. va_start(ap,fmt);
  23. vsprintf((char*)UART5_TX_BUF,fmt,ap);
  24. va_end(ap);
  25. i=strlen((const char*)UART5_TX_BUF);
  26. for(j=0;j<i;j++)
  27. {
  28. while(USART_GetFlagStatus(UART5,USART_FLAG_TC)==RESET);
  29. USART_SendData(UART5,UART5_TX_BUF[j]);
  30. }
  31. }

中断调用代码

  1. extern uint8_t Usart5_ReceiveState;
  2. extern u16 count;
  3. __asm void SystemReset(void);
  4.  
  5. void UART5_IRQHandler(void)
  6. {
  7. u8 clear= clear;
  8. u8 res;
  9.  
  10. if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)
  11. {
  12. USART_ClearITPendingBit(UART5, USART_IT_RXNE);
  13. res = USART_ReceiveData(UART5);
  14. UART5_RX_BUF[count] = res;
  15. count++;
  16. // Uart5_Char(res);
  17. }
  18. else if(USART_GetITStatus(UART5, USART_IT_IDLE) != RESET)
  19. {
  20. clear = UART5->SR;
  21. clear = UART5->DR;
  22. Usart5_ReceiveState = 1;
  23. }
  24.  
  25. }

主函数返回

  1. uint8_t Usart5_ReceiveState;
  2. void RCC_Configuration(void);
  3. void Port_Init(void);
  4. u16 count=0;
  5. int main()
  6. {
  7. u16 i;
  8.  
  9. RCC_ClearFlag();
  10. RCC_Configuration();
  11. Init485();
  12. RF_PortInit();
  13. uart1_Init(115200);
  14. usart5_Init(115200);
  15. GET_ID();
  16.  
  17. while(1)
  18. {
  19. GPIO_ResetBits(GPIOE,GPIO_Pin_4);
  20. GPIO_ResetBits(GPIOE,GPIO_Pin_5);
  21. for(i=0;i<test;i++)
  22. {
  23. // u5_printf("hello Dev,I am %s,\n\n",ID);
  24. // u5_printf("who are you?\n\n",ID);
  25. }
  26. // u1_printf("hello Dev,I am %s\n\n",ID);
  27. delay_FOR(400);
  28. if(Usart5_ReceiveState)
  29. {
  30.  
  31. for(i=0;i<count;i++)
  32. {
  33. Uart5_Char(UART5_RX_BUF[i]);
  34.  
  35. }
  36. // Uart5_Char(0x01);
  37. count = 0;
  38. Usart5_ReceiveState=0;
  39. }
  40. }
  41. }
  42. void RCC_Configuration(void)
  43. {
  44. ErrorStatus HSEStartUpStatus; //¶¨ÒåÍⲿ¾§ÕñΪÆô¶¯×´Ì¬Ã¶¾Ù±äÁ¿
  45. SystemInit(); //ϵͳ³õʼ»¯
  46. RCC_DeInit(); //¸´Î»RCC¼Ä´æÆ÷µ½Ä¬ÈÏÖµ
  47. RCC_HSEConfig(RCC_HSE_ON); //´ò¿ªÍⲿ¸ßËÙ¾§Õñ
  48. HSEStartUpStatus = RCC_WaitForHSEStartUp(); //µÈ´ýÍⲿ¸ßËÙ¾§Õñ×¼±¸ºÃ
  49. if(HSEStartUpStatus == SUCCESS) //Æô¶¯³É¹¦
  50. {
  51. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); ////flash¶ÁÈ¡»º´æÇøʹÄÜ
  52. FLASH_SetLatency(FLASH_Latency_2); //flashÑÓʱ
  53.  
  54. RCC_HCLKConfig(RCC_SYSCLK_Div1); //??AHB(HCLK)????==SYSCLK
  55. RCC_PCLK2Config(RCC_HCLK_Div1); //??APB2(PCLK2)?==AHB??
  56. RCC_PCLK1Config(RCC_HCLK_Div2); //??APB1(PCLK1)?==AHB1/2,Ô¤·ÖƵ2 72M
  57.  
  58. RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //??PLL?? == 8M£¨Íⲿ£© * 9 = 72MHz
  59. RCC_PLLCmd(ENABLE); //??PLL??
  60.  
  61. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //??PLL????
  62. {
  63. }
  64. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //?????? = PLL??
  65. while(RCC_GetSYSCLKSource() != 0x08) //??PLL??????????
  66. {
  67. }
  68. }
  69. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|
  70. RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG , ENABLE);//
  71. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  72. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  73. }

STM32串口空闲中断的更多相关文章

  1. Stm32使用串口空闲中断,基于队列来接收不定长、不定时数据

    串口持续地接收不定长.不定时的数据,把每一帧数据缓存下来且灵活地利用内存空间,下面提供一种方式供参考.原理是利用串口空闲中断和DMA,每当对方发来一帧完整的数据后,串口接收开始空闲,触发中断,在中断处 ...

  2. 串口配合DMA接收不定长数据(空闲中断+DMA接收)-(转载)

    1.空闲中断和别的接收完成(一个字节)中断,发送完成(发送寄存器控)中断的一样是串口中断: 2.空闲中断是接收到一个数据以后,接收停顿超过一字节时间  认为桢收完,总线空闲中断是在检测到在接收数据后, ...

  3. 串口1配合DMA接收不定长数据(空闲中断+DMA接收)

    1.空闲中断和别的接收完成(一个字节)中断,发送完成(发送寄存器控)中断的一样是串口中断: 2.空闲中断是接收到一个数据以后,接收停顿超过一字节时间  认为桢收完,总线空闲中断是在检测到在接收数据后, ...

  4. STM32串口遇到的一个问题

    做HLW8032电能表项目中关于USART使用DMA接收定长数据的问题 1:由于HLW8032芯片一上电,芯片就会通过串口每隔50ms向STM32发送24字节的数据,且我不能通过STM32控制HLW8 ...

  5. STM32串口DMA接收数据错位——暴力解决方法

    背景:两片STM32通过串口通信,为了减小CPU负担,采用DMA进行通信,发送端为STM32F103C8T6,接收端为STM32F407VET6.在调试的过程中发现,一直出现数据错位的问题,接收端尝试 ...

  6. STM32—串口使用总结

    文章目录 一.仅向上位机打印调试信息 二.与上位机交互信息 三.作为驱动接口 四.结合DMA接收数据帧 在日常学习中,串口经常作为和上位机通信的接口,进行打印信息方便调试程序,有时也会作为模块的驱动接 ...

  7. STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率

    前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...

  8. STM32串口中断的一些资料

    在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理 ...

  9. 关于STM32空闲中断

    有一次做一个东西,为了尽量不占用CPU的处理数据时间,所以就使用DMA接收串口的数据,但是呢问题来了.,,,,,怎么样才能确定接收到了一条完整的数据了,,我们都知道只要打开DMA 那家伙就不停的把接收 ...

随机推荐

  1. mysql截取函数substring_index()和right()用法

    ); 以.作为截取的分隔符. ); 从第2位开始截取,截取所有的. );

  2. Lodop打印表格带页头页尾 高度是否包含页头页尾

    通过设置TableHeightScope,可以实现对ADD_PRINT_TABLE,表格带页头页尾,查看本博客另一篇博文:Lodop打印表格带页头页尾 自动分页每页显示头尾 超文本超过打印项高度,会自 ...

  3. codeforces483B

    Friends and Presents CodeForces - 483B You have two friends. You want to present each of them severa ...

  4. 获取本地的jvm信息,进行图形化展示

    package test1; import java.lang.management.CompilationMXBean; import java.lang.management.GarbageCol ...

  5. 【CF1132G】Greedy Subsequences(线段树)

    [CF1132G]Greedy Subsequences(线段树) 题面 CF 题解 首先发现选完一个数之后选择下一个数一定是确定的. 对于每个数预处理出左侧第一个比他大的数\(L\),那么这个数加入 ...

  6. [CTSC2018]暴力写挂

    题目描述 www.lydsy.com/JudgeOnline/upload/201805/day1(1).pdf 题解 首先来看这个我们要最大化的东西. deep[u]+deep[v]-deep[lc ...

  7. Django的admin视图的使用

    要现在admin.py文件中将你要视图化操作的类进行注册: from django.contrib import admin from api import models # Register you ...

  8. 五十二、linux 编程——网络介绍

    52.1 网络介绍 使用远程资源 共享信息.程序和数据 分布处理 52.1.1 协议的概念 计算机网络中实现通信必须有一些约定,如对速率.传输代码.代码结构.传输控制步骤和出错控制等约定,这些约定即被 ...

  9. TPS和QPS 并发量区别;日活 访问量 活跃度

    一.系统承载吞度量 系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高,外部系统接口.IO影响速度越慢,系统吞吐能力越低,反之越高 ...

  10. Python3:OOP Demo

    方便快速回顾Python的OOP语法 ###################### # 类的私有专有方法 # ###################### # __init__ : 构造函数,在生成对 ...