生活随笔
收集整理的這篇文章主要介紹了
利用STM32 的串口来发送和接收数据实验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0目標
1?STM32?串口簡介
2?硬件設計
3?軟件設計
4?下載驗證
0.目標
利用串口?
1.STM32?串口簡介
串口設置的一般步驟可以總結為如下幾個步驟:
1)?串口時鐘使能,?GPIO?時鐘使能
2)?串口復位
3) GPIO?端口模式設置
4)?串口參數初始化
5)?開啟中斷并且初始化?NVIC(如果需要開啟中斷才需要這個步驟)
6)?使能串口
7)?編寫中斷處理函數?
注:對于復用功能的?IO,我們首先要使能?GPIO?時鐘,然后使能復用功能時鐘,同時要把?GPIO?模式設置為復用功能對應的模式。
查看手冊《STM32 中文參考手冊 V10》P110 的表格“8.1.11 外設的 GPIO 配置:
2?硬件設計
(1)LED0接PA0(2)串口1
3.軟件設計新建工程:
其中SYSTEM下放置原子哥提供的三個文件夾delay、sys、uart(及其文件),HARDWARE下建LED文件夾,及其內建LED.C與LED.H文件。uart中串口函數:[html]?view plaincopy
<span?style="font-size:18px;"></span>??[csharp]?view plaincopy
void?uart_init(u32?bound){????????????GPIO_InitTypeDef?GPIO_InitStructure;??????USART_InitTypeDef?USART_InitStructure;??????NVIC_InitTypeDef?NVIC_InitStructure;?????????????RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,?ENABLE);??????????????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_9;???????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;??????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;???????GPIO_Init(GPIOA,?&GPIO_InitStructure);?????????????????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_10;??????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_IN_FLOATING;??????GPIO_Init(GPIOA,?&GPIO_InitStructure);?????????????????NVIC_InitStructure.NVIC_IRQChannel?=?USART1_IRQn;??????NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3?;??????NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?3;????????????NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;???????????????NVIC_Init(&NVIC_InitStructure);??????????????????USART_InitStructure.USART_BaudRate?=?bound;??????USART_InitStructure.USART_WordLength?=?USART_WordLength_8b;??????USART_InitStructure.USART_StopBits?=?USART_StopBits_1;??????USART_InitStructure.USART_Parity?=?USART_Parity_No;??????USART_InitStructure.USART_HardwareFlowControl?=?USART_HardwareFlowControl_None;??????USART_InitStructure.USART_Mode?=?USART_Mode_Rx?|?USART_Mode_Tx;?????????USART_Init(USART1,?&USART_InitStructure);???????USART_ITConfig(USART1,?USART_IT_RXNE,?ENABLE);??????USART_Cmd(USART1,?ENABLE);????????????????????????}??LED.c內容:[csharp]?view plaincopy
<span?style="font-size:18px;">#include?"led.h"??????????????void?LED_Init(void)??{??????GPIO_InitTypeDef??GPIO_InitStructure;?????????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,?ENABLE);????????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_0;??????????????????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;???????????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;??????????GPIO_Init(GPIOA,?&GPIO_InitStructure);?????????????????????GPIO_SetBits(GPIOA,GPIO_Pin_0);???????????????????????????}???</span>??led.h:[csharp]?view plaincopy
<span?style="font-size:18px;">#ifndef?__LED_H??#define?__LED_H????#include?"sys.h"???#define?LED0?PAout(0)//?PA0????void?LED_Init(void);???????????????????????????????#endif</span>??主函數:
[csharp]?view plaincopy
#include?"led.h"??#include?"delay.h"??#include?"sys.h"??#include?"usart.h"???int?main(void)???{????????????u8?t;??????u8?len;???????u16?times=0;??????delay_init();??????????????????NVIC_Configuration();??????????uart_init(9600);???????????LED_Init();????????????????????while(1)??????{??????????if(USART_RX_STA&0x8000)??????????{????????????????????????????????????len=USART_RX_STA&0x3f;??????????????printf("\r\n您發送的消息為:\r\n\r\n");??????????????for(t=0;t<len;t++)??????????????{??????????????????USART_SendData(USART1,?USART_RX_BUF[t]);??????????????????while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);??????????????}??????????????printf("\r\n\r\n");??????????????USART_RX_STA=0;??????????}else??????????{??????????????times++;??????????????if(times%5000==0)??????????????{??????????????????printf("\r\n口袋里的超超?串口實驗\r\n");??????????????????printf("真JB帥\r\n\r\n");??????????????}??????????????if(times%200==0)printf("請輸入數據,以回車鍵結束\n");????????????????if(times%30==0)LED0=!LED0;??????????????delay_ms(10);?????????????}??????}???????}??4?下載驗證
總結
以上是生活随笔為你收集整理的利用STM32 的串口来发送和接收数据实验的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。