久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4021|回復: 0
打印 上一主題 下一主題
收起左側

stm32 DEBUG USART程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:72519 發表于 2015-1-23 01:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #ifndef _DEBUGUSART_H_
  2. #define _DEBUGUSART_H_
  3. #include  <stm32f10x.h>
  4. #include<stdio.h>

  5. #define USE_USART             3

  6. #if(USE_USART==1)
  7. #define DEBUG_USART             USART1
  8. #define DEBUGRX_PORT      GPIOA
  9. #define DEBUGRX_PIN      GPIO_Pin_10//RX
  10. #define DEBUGTX_PORT      GPIOA
  11. #define DEBUGTX_PIN      GPIO_Pin_9//TX
  12. #define DEBUG_USART_IRQn        USART1_IRQn
  13. #define DEBUG_RCC_APBnPeriphClockCmd() RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  14. #endif

  15. #if (USE_USART==3)
  16. #define DEBUG_USART             USART3
  17. #define DEBUGRX_PORT      GPIOD
  18. #define DEBUGRX_PIN      GPIO_Pin_9//RX
  19. #define DEBUGTX_PORT      GPIOD
  20. #define DEBUGTX_PIN      GPIO_Pin_8//TX
  21. #define DEBUG_USART_IRQn        USART3_IRQn
  22. #define DEBUG_RCC_APBnPeriphClockCmd() RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);\
  23.                                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);\
  24.                                        GPIO_PinRemapConfig(GPIO_FullRemap_USART3,ENABLE);
  25. #endif


  26. void UARTGPIO_config(void);//串口IO口配置
  27. void USART_config(u32 baudrate);//串口初始化
  28. void UARTNVIC_config(void);//配置中斷
  29. int  fputc(int ch, FILE *f);//發送數據
  30. int  fgetc(FILE *f); // 接收數據
  31. int  USART_Scanf_Name(char * str);
  32. void DEBUGUSART(u32 baudrate);
  33. #endif
  34. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  35. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  36. #include"DEBUG_USART.H"

  37. void DEBUGUSART(u32 baudrate)
  38. {  
  39. USART_config(baudrate);   //串口初始化19200
  40.   UARTGPIO_config();      //串口IO口配置
  41. }

  42. void UARTGPIO_config(void)//串口IO口配置
  43. {
  44. GPIO_InitTypeDef GPIO_InitStructure;
  45. //GPIO_StructInit(&GPIO_InitStructure);//用默認值初始化結構體為所有端口2M浮空輸入
  46. GPIO_InitStructure.GPIO_Pin = DEBUGTX_PIN;//PA9作為US1的TX端,負責發送數據
  47. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//復用推挽輸出模式
  48. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//2M
  49. GPIO_Init(DEBUGTX_PORT,&GPIO_InitStructure);//用以上值初始化PA9口

  50. GPIO_InitStructure.GPIO_Pin = DEBUGRX_PIN;//PA10作為US1的RX端,負責接收數據
  51. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入模式
  52. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//2M
  53. GPIO_Init(DEBUGRX_PORT, &GPIO_InitStructure);//用以上值初始化PA10口
  54. }

  55. void USART_config(u32 baudrate)//串口初始化
  56. {
  57. USART_InitTypeDef USART_InitStructure;
  58. DEBUG_RCC_APBnPeriphClockCmd();       
  59. USART_StructInit(&USART_InitStructure);//將結構體設置為缺省狀態,9600bps,8數據位,1停止位,不校驗,硬件流控制失能
  60. USART_InitStructure.USART_BaudRate =baudrate;//波特率設置為19200
  61. USART_InitStructure.USART_WordLength = USART_WordLength_8b;//一幀數據的寬度設置為8bits
  62. USART_InitStructure.USART_StopBits = USART_StopBits_1;//在幀結尾傳輸1個停止位
  63. USART_InitStructure.USART_Parity = USART_Parity_No;//奇偶失能模式,無奇偶校驗
  64. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//發送/接收使能
  65. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制失能
  66. USART_Init(DEBUG_USART, &USART_InitStructure);//設置串口1
  67. //USART_ITConfig(DEBUG_USART, USART_IT_RXNE, ENABLE);//打開串口1的接收中斷響應函數
  68. USART_Cmd(DEBUG_USART, ENABLE);//打開串口1
  69. }


  70. void UARTNVIC_config()//配置中斷
  71. {
  72. NVIC_InitTypeDef NVIC_InitStructure;
  73. //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//選擇中斷分組1
  74. NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQn;//選擇串口1中斷
  75. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//搶占式中斷優先級設置為0
  76. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//響應式中斷優先級設置為3
  77. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中斷
  78. NVIC_Init(&NVIC_InitStructure);
  79. }


  80. /*
  81. void DEBUG_USART_IRQHandler(void)//中斷方式的USART接收
  82. {
  83. if (USART_GetITStatus(DEBUG_USART, USART_IT_RXNE) != RESET)  //判斷發生接收中斷
  84. {//USART_ClearITPendingBit(DEBUG_USART,  USART_IT_RXNE);    //清除中斷標志,讀接收到的數據時自動清除
  85. USART_SendData(DEBUG_USART, USART_ReceiveData(DEBUG_USART));//將數據回送至電腦
  86. while(USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TC) == RESET);//等待數據發送完畢
  87. }
  88. }*/

  89. /*
  90. if (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) != RESET)  //判斷接收標志;查詢方式的USART接收
  91. {
  92. USART_ReceiveData(DEBUG_USART);
  93. }
  94. USART_SendData(DEBUG_USART, i);//將數據回送至電腦
  95. while(USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TC) == RESET);//等待數據發送完畢
  96. */

  97. int fputc(int ch, FILE *f)//發送數據
  98.    {
  99.       USART_SendData(DEBUG_USART, (unsigned char) ch);//
  100.       while (!(DEBUG_USART->SR & USART_FLAG_TXE));
  101.       return (ch);
  102.    }



  103. int fgetc(FILE *f) // 接收數據
  104.   {
  105.       while (!(DEBUG_USART->SR & USART_FLAG_RXNE));
  106.       return ((int)(DEBUG_USART->DR & 0x1FF));
  107.    }
  108. //如果要使用printf函數除了#include<stdio.h>和重定義兩個輸入輸出函數外還應該Target->Code Generation中勾選Use MicroLIB
  109. //char ch='E',str[10]={"FGHIJKLM"};
  110. //int intd=12345;
  111. //printf("The is a example!\n");
  112. //printf("%c\n%s\n%d\n%c\n%s\n%d\n%d\n",'A',"BCD",0x23,ch,str,ch,intd);
  113. //The is a example!
  114. //A
  115. //BCD
  116. //35
  117. //E
  118. //FGHIJKLM
  119. //69
  120. //12345
  121. /*******************************************************************************
  122. * Function Name  : USART_Scanf_Name
  123. * Description    : Gets Char values from the hyperterminal.
  124. * Input          : None
  125. * Output         : None
  126. * Return         : Length
  127. *******************************************************************************/
  128. int USART_Scanf_Name(char * str)
  129. {       
  130.     u16 index = 0;
  131. USART_ClearFlag(DEBUG_USART,USART_FLAG_RXNE);//清一下接收標志位
  132.     while(1)
  133.     {
  134.         /* Loop until RXNE = 1 */
  135.         while(USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) == RESET){}//等待直到有數據的到來
  136.         
  137. str[index++] = (USART_ReceiveData(DEBUG_USART));
  138.    printf("%c",str[index - 1]);//返回輸入的內容
  139.    if(str[index - 1] == 0x0d)//回車鍵\r
  140.    {  
  141.        index--;//去掉回車符并以\0結尾
  142. str[index] ='\0';//結束符號
  143.        return index;
  144.         }
  145.     }       
  146. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人羞羞国产免费视频 | 国产精品久久久久久妇女6080 | 国产精品久久久久久高潮 | 欧产日产国产精品国产 | 成人欧美一区二区 | 久久午夜精品 | 淫片一级国产 | 中文字幕一区二区三区日韩精品 | 国产乱人伦精品一区二区 | 欧美一级片 | 国产aⅴ爽av久久久久久久 | 色综合视频 | 国产精品成人一区二区三区吃奶 | www.国产| 久久精品亚洲欧美日韩久久 | 免费毛片网 | 久久久久久久综合色一本 | 亚洲网在线 | 日本三级电影免费观看 | 九九热免费视频在线观看 | 国产精品爱久久久久久久 | 色综合一区 | 人妖av | 中文字幕免费中文 | av入口 | 日韩中文字幕在线播放 | 免费观看一级特黄欧美大片 | 日韩中文一区二区三区 | 黄色免费观看 | 手机av在线| 91免费在线 | 久久久国产一区 | 亚洲高清在线观看 | 99re在线播放 | 成人免费大片黄在线播放 | 亚洲性人人天天夜夜摸 | 天堂一区二区三区 | 久久神马 | 色又黄又爽网站www久久 | 亚洲欧美另类在线 | 色偷偷人人澡人人爽人人模 |