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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32f103 uart1 中斷收發

[復制鏈接]
跳轉到指定樓層
樓主
本代碼親測無誤。
1.在PC串口工具發送給stm32 20字節的數據.
2.stm32收到20字節后,回發給PC串口工具,并閃燈。



主程序文件:
  1. /* MAIN.C file
  2. *
  3. * stm32-project
  4. */
  5. /***************************************************************
  6. / 深圳EU電子出品-版權所有-翻版必究
  7. / EU-熱愛嵌入式開發
  8. ***************************************************************/
  9. //類型轉換
  10. typedef unsigned char       bool;
  11. typedef unsigned char       u8;
  12. typedef unsigned short      u16;
  13. #define  True  1
  14. #define  False 0

  15. //SET BIT.    Example: a |= SETBIT0
  16. enum
  17. {
  18.         SETBIT0 = 0x0001,  SETBIT1 = 0x0002,        SETBIT2 = 0x0004,         SETBIT3 = 0x0008,
  19.         SETBIT4 = 0x0010,         SETBIT5 = 0x0020,        SETBIT6 = 0x0040,         SETBIT7 = 0x0080,
  20.         SETBIT8 = 0x0100,         SETBIT9 = 0x0200,        SETBIT10 = 0x0400, SETBIT11 = 0x0800,
  21.         SETBIT12 = 0x1000, SETBIT13 = 0x2000,        SETBIT14 = 0x4000, SETBIT15 = 0x8000               
  22. };
  23. //CLR BIT.    Example: a &= CLRBIT0
  24. enum
  25. {
  26.         CLRBIT0 = 0xFFFE,  CLRBIT1 = 0xFFFD,        CLRBIT2 = 0xFFFB,         CLRBIT3 = 0xFFF7,       
  27.         CLRBIT4 = 0xFFEF,         CLRBIT5 = 0xFFDF,        CLRBIT6 = 0xFFBF,         CLRBIT7 = 0xFF7F,
  28.         CLRBIT8 = 0xFEFF,         CLRBIT9 = 0xFDFF,        CLRBIT10 = 0xFBFF, CLRBIT11 = 0xF7FF,
  29.         CLRBIT12 = 0xEFFF, CLRBIT13 = 0xDFFF,        CLRBIT14 = 0xBFFF, CLRBIT15 = 0x7FFF
  30. };
  31. //CHOSE BIT.  Example: a = b&CHSBIT0
  32. enum
  33. {
  34.         CHSBIT0 = 0x0001,  CHSBIT1 = 0x0002,        CHSBIT2 = 0x0004,         CHSBIT3 = 0x0008,
  35.         CHSBIT4 = 0x0010,         CHSBIT5 = 0x0020,        CHSBIT6 = 0x0040,         CHSBIT7 = 0x0080,
  36.         CHSBIT8 = 0x0100,         CHSBIT9 = 0x0200,        CHSBIT10 = 0x0400, CHSBIT11 = 0x0800,
  37.         CHSBIT12 = 0x1000, CHSBIT13 = 0x2000,        CHSBIT14 = 0x4000, CHSBIT15 = 0x8000               
  38. };

  39. /* INCLUDES */
  40. //MCU
  41. #include "stm32f10x_rcc.h"
  42. #include "stm32f10x_gpio.h"
  43. #include "stm32f10x_tim.h"
  44. #include "util.h"
  45. #include "uart1.h"

  46. #include <stdio.h>
  47. #include <string.h>

  48. #if 0
  49. #ifdef __GNUC__
  50.   /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  51.      set to 'Yes') calls __io_putchar() */
  52.   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  53. #else
  54.   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  55. #endif /* __GNUC__ */

  56. PUTCHAR_PROTOTYPE
  57. {
  58.   /* Place your implementation of fputc here */
  59.   /* e.g. write a character to the USART */
  60.   USART_SendData(USART1, (uint8_t) ch);

  61.   /* Loop until the end of transmission */
  62.   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  63.   {}

  64.   return ch;
  65. }
  66. #endif

  67. //設置PB10狀態 STM32-MINI開發板的LED管腳
  68. void SetPB10(bool sta)
  69. {               
  70.                 static bool StartFlag = True;
  71.                 if(StartFlag)
  72.                 {
  73.                         GPIO_InitTypeDef GPIO_InitStructure;
  74.                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  75.                         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  76.                         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  77.                         GPIO_Init(GPIOB, &GPIO_InitStructure);
  78.                         StartFlag = False;
  79.                 }       
  80.                 if(!sta)       
  81.                         GPIO_SetBits(GPIOB, GPIO_Pin_10);       
  82.                 else
  83.                         GPIO_ResetBits(GPIOB, GPIO_Pin_10);       
  84. }

  85. //定時器配置并開啟 使用定時器3
  86. void TimeON(void)
  87. {
  88.                 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  89.                 NVIC_InitTypeDef NVIC_InitStructure;
  90.                 //開啟定時器外設時鐘
  91.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  92.                 //配置定時器參數
  93.                 TIM_DeInit(TIM3);
  94.                 TIM_TimeBaseStructure.TIM_Period = 10000;                                                                          //10ms定時                         
  95.                 TIM_TimeBaseStructure.TIM_Prescaler = (72000000/1000000 - 1);              
  96.                 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     
  97.                 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  98.                 TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  99.                 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);       
  100.                 //中斷配置
  101.                 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  102.                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //搶占優先級2 低優先級別中斷
  103.                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                           //響應優先級0 高級別的響應中斷
  104.                 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
  105.                 NVIC_Init(&NVIC_InitStructure);          
  106.                 //開中斷
  107.                 TIM_ClearFlag(TIM3, TIM_FLAG_Update);                                          
  108.                 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  109.                 //開啟定時器                         
  110.                 TIM_Cmd(TIM3, ENABLE);
  111. }

  112. u32 led_time = 240;
  113. //定時器中斷處理 從stm32f10x_it.c添加
  114. void Time_IntHandle(void)
  115. {
  116.                 //清中斷標識
  117.                 TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  118.                 //---------------- 中斷處理  ---------------------
  119.                 {
  120.                                 static u8 Num = 0;
  121.                                 if(++Num == led_time)        //zlz modify 30->240
  122.                                 {
  123.                                                 //----------- 0.3s事務 閃爍LED -----------
  124.                                                 static bool Temp = False;
  125.                                                 Temp = !Temp;
  126.                                                 ledon = !ledon;
  127.                                                 //SetPB10(Temp);
  128.                                                 //--------------------------------------
  129.                                                 Num = 0;
  130.                                                 //USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
  131.                                 }
  132.                 }
  133. }

  134. /*-------------------------------------------------------------------------------------------------------
  135. *  程序從這里執行                       
  136. *  本程序通過定時器 閃爍STM32-MINI開發板LED 請保持LS1跳線帽處于連接狀態
  137. -------------------------------------------------------------------------------------------------------*/
  138. int main(void)
  139. {
  140.                 u32 test;
  141.                 u8 RxCounter, TxCounter, i;
  142.                 u8 RxBuffer[32], TxBuffer[32];
  143.                 //--------------------------- CLK INIT, HSE PLL ----------------------------
  144.                 ErrorStatus HSEStartUpStatus;
  145.                 //RCC reset
  146.                 RCC_DeInit();
  147.                 //開啟外部時鐘 并執行初始化
  148.                 RCC_HSEConfig(RCC_HSE_ON);
  149.                 //等待外部時鐘準備好
  150.                 HSEStartUpStatus = RCC_WaitForHSEStartUp();
  151.                 //啟動失敗 在這里等待
  152.                 while(HSEStartUpStatus == ERROR);
  153.                 //設置內部總線時鐘
  154.                 RCC_HCLKConfig(RCC_SYSCLK_Div1);
  155.                 RCC_PCLK1Config(RCC_HCLK_Div1);
  156.                 RCC_PCLK2Config(RCC_HCLK_Div1);
  157.                 //外部時鐘為8M 這里倍頻到72M
  158.                 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  159.                 RCC_PLLCmd(ENABLE);
  160.                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  161.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  162.                 while(RCC_GetSYSCLKSource() != 0x08);

  163.                 //----------------------------- CLOSE HSI ---------------------------
  164.                 //關閉內部時鐘HSI
  165.                 RCC_HSICmd(DISABLE);       
  166.                
  167.                 //開PB口時鐘
  168.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  169.                        
  170.                 //中斷配置 2-level interrupt
  171.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  172.                
  173.                 //開總中斷
  174.                 __enable_irq();
  175.                
  176.                 //開定時器
  177.                 TimeON();
  178.                
  179.                 for(i=0; i<UART1_N_TX; ++i)
  180.                 {
  181.                         //TxBuffer1[i] = 0x18 + i;
  182.                 }
  183.                 Uart1_Cfg();
  184.                
  185.                 ledon = 1;
  186.                
  187.                 //printf("line %d, %s\n", __LINE__, __func__);
  188.                 //等待中斷
  189.                 while(1)
  190.                 {
  191.                         if( rx4pc1 )
  192.                         {
  193.                                         rx4pc1 = 0;
  194.                                         memcpy(TxBuffer1, RxBuffer1, UART1_N_RX);
  195.                                         USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
  196.                                
  197.                                         if( (RxBuffer1[18] == 0x55) && (RxBuffer1[19] == 0x1a) )
  198.                                         {
  199.                                                 SetPB10(1);
  200.                                         }
  201.                                         else if( (RxBuffer1[0] == 0x56) && (RxBuffer1[1] == 0x1a) )
  202.                                         {
  203.                                                 SetPB10(0);
  204.                                         }
  205.                                         memset(RxBuffer1, 0, sizeof(RxBuffer1));
  206.                         }
  207.                
  208.                         //SetPB10(ledon);
  209.                 }
  210. }



復制代碼


uart1_irq_rxtx_04231904.rar

1.41 MB, 下載次數: 33, 下載積分: 黑幣 -5

stm32f103 uart1 中斷收發

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:118784 發表于 2016-5-6 10:51 | 只看該作者
不錯,學習了
回復

使用道具 舉報

板凳
ID:129602 發表于 2016-7-14 11:20 | 只看該作者
正在看串口,學習了
回復

使用道具 舉報

地板
ID:36783 發表于 2016-7-22 20:59 | 只看該作者
學習了。 謝謝樓主分享!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区在线免费观看 | 欧美在线综合 | 国产精品不卡 | 成人一区二 | 欧美专区在线 | 亚洲a视| 免费a v网站 | 国产精品视频免费看 | 免费在线a视频 | av网站在线播放 | 国产区高清 | www.av在线| 国产成人一区二区 | 国产一区欧美 | 狠狠狠色丁香婷婷综合久久五月 | 久久高清国产 | 国产成人精品a视频 | 一区二区久久 | 天天艹日日干 | 色视频一区二区 | 国产一区二区三区不卡av | 久久免费国产视频 | 欧美在线一区二区三区 | 日韩在线欧美 | 欧美激情欧美激情在线五月 | 亚洲 自拍 另类 欧美 丝袜 | 精品中文字幕一区二区三区 | 做a的各种视频 | 婷婷桃色网 | 久久久久国产精品 | 日韩免费毛片视频 | 久久成人精品一区二区三区 | 一区二区免费在线视频 | 精品福利在线 | 欧美九九 | 亚洲网址在线观看 | 久久亚洲91 | 青青久视频 | 网站一区二区三区 | a在线观看免费 | 日韩视频精品在线 |