色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > stm32串口編程實例-實現(xiàn)數(shù)據(jù)的收發(fā)功能

stm32串口編程實例-實現(xiàn)數(shù)據(jù)的收發(fā)功能 時間:2018-07-23      來源:未知

串口是USART(通用同步/異步收發(fā)器)的俗稱。實際上,串行總線并不只有USART,還包含IIC、SPI、CAN、K線、單總線、USB、485等等總線,只是因為UART用得較多,習(xí)慣上叫做“串口”。

首先來看下UART的通信模型,

串口編程

設(shè)備1與設(shè)備2進行通信

TXD:發(fā)送端,負責(zé)發(fā)送數(shù)據(jù)

RXD:接收端,負責(zé)接收數(shù)據(jù)

GND:地線,保證設(shè)備1與設(shè)備2有相同的參考電壓,保證通信的正常進行。

從模型上我們可以看出UART(USART是同步通信,在這個模型的基礎(chǔ)上都一條始終控制總線,但不常用)是一個異步、全雙工、串行通信。既然是異步的,那么就需要控制設(shè)備1與設(shè)備2數(shù)據(jù)收發(fā)的速度一致性,也就是兩設(shè)備要有相同的波特率(bit/s一秒鐘能傳的),否則通信會出現(xiàn)數(shù)據(jù)傳輸錯誤。

現(xiàn)在我們配置stm32的串口1,實現(xiàn)與PC端上的串口助手實現(xiàn)通信。首先查看串口的引腳、查看芯片手冊上各引腳對用的復(fù)用功能等。

以下是實現(xiàn)代碼,主要是實現(xiàn)Uart1數(shù)據(jù)的收發(fā)。

void USART1_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

//配置時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

/* USART1 GPIO config */

/* Configure USART1 Tx (PA.09) as alternate function push-pull */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure USART1 Rx (PA.10) as input floating */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* USART1 mode config */

USART_InitStructure.USART_BaudRate = 115200;

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);

//清空發(fā)送完成標(biāo)志位

USART_ClearFlag(USART1,USART_FLAG_TC);

//使能串口

USART_Cmd(USART1, ENABLE);

}

//定義printf函數(shù)接口(printf重定向)

int fputc(int ch, FILE *f)

{

USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

return (ch);

}

//定義scanf函數(shù)接口(scanf重定向)

int fgetc(FILE *f)

{

while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

return (int)USART_ReceiveData(USART1);

}

//發(fā)送字符

char usart1_putc(char ch)

{

USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);

return (ch);

}

//發(fā)送字符串

int usart1_putstr(unsigned char* buff,int len)

{

int i = 0;

for(i = 0;i < len;i++)

{

usart1_putc(buff[i]);

}

return len;

}

//接收字符

char usart1_getc(void)

{

char temp = 0;

while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!= SET);

temp = USART_ReceiveData(USART1);

return temp;

}

//接收字符串

int usart1_getstr(unsigned char* buff,int len)

{

int i = 0;

for(i = 0;i < len;i++)

{

buff[i] = usart1_getc();

}

return len;

}

配置好之后,將這些函數(shù)放到頭文件中申明,并放到主函數(shù)中去初始化及調(diào)用,就可以實現(xiàn)數(shù)據(jù)的收發(fā)功能。

上一篇:套接字是什么?他的定義如此簡單

下一篇:Linux編譯內(nèi)核介紹

熱點文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權(quán)所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 91免费看视频.| 国产精品欧美日韩一区二区| 亚洲最大福利网站| 富二代精品短视频| 亚洲欧美另类国产| 欧美性视频网站| 色琪琪综合男人的天堂aⅴ视频| 国产精品69av| 欧美人交a欧美精品| 亚洲美女动态图120秒| 国产精品福利网| 欧美性感美女h网站在线观看免费| 日韩国产一区三区| 国产精品久久久久久久7电影| 欧美日韩在线第一页| 亚洲人高潮女人毛茸茸| 国产精品直播网红| 久久久在线视频| www日韩欧美| 亚洲欧美国产一区二区三区| 国产欧美va欧美va香蕉在| 久久久久久噜噜噜久久久精品| 日韩中文字幕免费| 亚洲精品视频在线观看视频| 国产乱肥老妇国产一区二| 7777精品久久久久久| 欧美日韩国产综合新一区| 日韩在线中文视频| 国产午夜精品视频免费不卡69堂| 91精品一区二区| 国产主播喷水一区二区| 欧美在线亚洲在线| 91极品女神在线| 久久久免费电影| 欧美丰满老妇厨房牲生活 | 668精品在线视频| 欧美美女操人视频| 精品国模在线视频| 中文字幕亚洲综合久久| 亚洲天堂男人天堂| 亚洲视频精品在线|