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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3706|回復: 0
收起左側

STM32串口配置(串口二的配置=初始化+中斷配置+中斷接收函數)

[復制鏈接]
ID:110875 發表于 2021-11-1 21:49 | 顯示全部樓層 |閱讀模式
繼上貼http://www.zg4o1577.cn/bbs/dpj-213781-1.html,今天發布STM32的串口2配置程序,話不多說。

1 /*===============================================================================
  2 Copyright:
  3 Version:
  4 Author:   
  5 Date: 2021/11/1
  6 Description:
  7     函數功能是將接收固定長度的字符串,并將接收后的字符串通過串口發送出去
  8 revise Description:
  9 ===============================================================================*/
10 #include "stm32f10x_usart.h"
11 #include "stm32f10x.h"
12 #include "stm32f10x_iwdg.h"
13
14
15 u8 USART2_RX_BUF[250];
16 u8 USART2_RX_CNT=0;
17 u16 USART2_RX_STA=0;       //接收狀態標記   
18
19 void Usart2_Init(u32 bound)
20 {  
21     GPIO_InitTypeDef GPIO_InitStructure;
22     USART_InitTypeDef USART_InitStructure;
23     NVIC_InitTypeDef NVIC_InitStructure;
24     //|RCC_APB2Periph_AFIO
25     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA時鐘
26     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2時鐘
27
28     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    //PA2
29     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //復用推挽
30     GPIO_Init(GPIOA, &GPIO_InitStructure);
31
32     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
33     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入
34     GPIO_Init(GPIOA, &GPIO_InitStructure);  
35
36     RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);//復位串口2
37     RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);//停止復位
38
39     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級   0-3;
40     NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //使能串口2中斷
41     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //先占優先級2級
42     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //從優先級2級
43     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
44     NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器
45
46     USART_InitStructure.USART_BaudRate = bound;//波特率設置
47     USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位數據長度
48     USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個停止位
49     USART_InitStructure.USART_Parity = USART_Parity_No;///奇偶校驗位
50     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數據流控制
51     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收發模式
52
53     USART_Init(USART2, &USART_InitStructure); ; //初始化串口
54     USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//開啟中斷
55     USART_Cmd(USART2, ENABLE);                    //使能串口
56
57 }
58 /**
59 * USART2發送len個字節.
60 * buf:發送區首地址
61 * len:發送的字節數(為了和本代碼的接收匹配,這里建議不要超過64個字節)
62 **/
63 void USART2_Send_Data(u8 *buf,u16 len)
64 {
65     u16 t;
66       for(t=0;t<len;t++)        //循環發送數據
67     {           
68         while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);      
69         USART_SendData(USART2,buf[t]);
70     }     
71     while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);         
72 }
73 /**
74 * 這也是一個接收函數,可以用,也可以用下面main函數的方法調用
75 * USART2查詢接收到的數據
76 * buf:接收緩存首地址
77 * len:讀到的數據長度
78 **/
79 void USART2_Receive_Data(u8 *buf)
80 {
81     u8 rxlen=USART2_RX_CNT;
82     u8 i=0;
83     delay_ms(10);        //等待10ms,連續超過10ms沒有接收到一個數據,則認為接收結束
84     while(rxlen!=USART2_RX_CNT)
85     {
86         rxlen=USART2_RX_CNT;
87         delay_ms(10);
88     }
89         for(i=0;i<(USART2_RX_CNT);i++)
90         {
91             buf[ i] = USART2_RX_BUF[ i];   
92             USART2_RX_BUF[ i] = 0;
93         }        
94         USART2_RX_CNT=0;        //清零
95     
96 }
97
98 void main(void)
99 {
100     Usart2_Init(9600);//串口1波特率設置為9600
101     while(1)
102     {
103         if(USART2_RX_STA)//數據接收完成
104         {
105             USART2_RX_STA=0;            
106             //將接收到的數據發送出去
107             USART2_Send_Data(USART2_RX_BUF,USART2_RX_CNT);//通過串口1將接收到的固定長度字符發送出去   
108             USART2_RX_CNT=0;//指針復位
109         }
110     }   
111 }
112
113
114 void USART2_IRQHandler(void)
115 {
116     u8 res;        
117      if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收到數據
118     {         
119         res =USART_ReceiveData(USART2);     //讀取接收到的數據        
120         if(USART2_RX_STA==0)
121         {
122             USART2_RX_BUF[USART2_RX_CNT] = res;        //記錄接收到的值   
123             //當數據結尾收到0xA0和0xA1代表數據接收完成,是一串完整的數據
124             if(USART2_RX_BUF[USART2_RX_CNT-1]==0xA0&&USART2_RX_BUF[USART2_RX_CNT]==0xA1)
125                 USART2_RX_STA=1;//表示接收數據結束
126             USART2_RX_CNT++;                        //接收數據增加1
127         }
128         }
129     }  
130     //溢出-如果發生溢出需要先讀SR,再讀DR寄存器則可清除不斷入中斷的問題
131     if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET)
132     {
133         USART_ReceiveData(USART2);
134         USART_ClearFlag(USART2,USART_FLAG_ORE);
135     }
136      USART_ClearFlag(UART2,USART_IT_RXNE); //一定要清除接收中斷   
137 }

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文在线一区 | 日韩中文字幕久久 | 精久久| 高清欧美性猛交xxxx黑人猛交 | 亚洲第一成人av | 欧美黄色网| 日韩视频一区在线观看 | 国产激情视频在线 | 在线免费观看毛片 | 嫩草视频在线免费观看 | 亚洲欧洲综合av | 天天看天天干 | 中文字幕高清av | 久草资源在线视频 | 欧美a级成人淫片免费看 | 99pao成人国产永久免费视频 | 久久r精品 | 国产黄色麻豆视频 | 国产精品69毛片高清亚洲 | 日本亚洲一区二区 | 久久涩涩 | 国产一区二区三区在线视频 | 91传媒在线观看 | 日韩精品一区在线 | 日本午夜在线视频 | 国产成人精品一区二区三区四区 | 欧美h | 成人中文字幕在线 | 亚洲永久字幕 | 91色在线| 成人免费黄色 | a黄视频| 欧美一级大片免费观看 | 超碰97免费在线 | 另类专区亚洲 | 日本理论片好看理论片 | 国产视频精品免费 | 欧美午夜久久 | 作爱视频免费观看 | 全部免费毛片在线播放网站 | 国产欧美一区二区三区久久手机版 |