www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] STM32的使用有利有弊,種類多---但是種類有太多,資料也是比較亂的,還有就是庫的調(diào)用,經(jīng)常忘記一些函數(shù)的使用------比如最常用的串口-------------------------------------------------------------

STM32的使用有利有弊,種類多---但是種類有太多,資料也是比較亂的,還有就是庫的調(diào)用,經(jīng)常忘記一些函數(shù)的使用------比如最常用的串口------


------------------------------------------------------------------------------USART ----設(shè)置-------------------------------

void USART1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); //USART1--時鐘--與對應(yīng)--GPIO--時鐘開啟

//USART1的Tx---GPIO----PA.09----復(fù)用推挽輸出
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);

//USART1的Rx---GPIO----PA.10----浮空輸入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

//USART1的模式配置
USART_InitStructure.USART_BaudRate = 115200; //波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //串口傳輸?shù)淖珠L
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;//串口模式---接收---發(fā)送
USART_Init(USART1, &USART_InitStructure);

USART_ClearFlag(USART1,USART_FLAG_TC);//清除串口1發(fā)送中斷,否則第一個數(shù)不會發(fā)生

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//接收中斷使能----一般是在中斷中需要用數(shù)組將接收到的數(shù)據(jù)保存起來時使用

USART_Cmd(USART1, ENABLE);//使能USART1
}

-----------------------------------------/重定向c庫函數(shù)----printf----到USART1-----------------------------------


int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch); //發(fā)送一個字節(jié)數(shù)據(jù)到USART1
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); // 等待發(fā)送完畢

return (ch);
}

-----------------------------------------/重定向c庫函數(shù)----scanf------到USART1-----------------------
int fgetc(FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); //等待串口1輸入數(shù)據(jù)
return (int)USART_ReceiveData(USART1);
}

------上面兩個重定向----是將原來C庫的函數(shù)與現(xiàn)在硬件的相對應(yīng)---------

------我們也可以自己編寫相似函數(shù)--------運用基本的兩個函數(shù)----發(fā)送---USART_SendData()-----接收------USART_ReceiveData()---

-----------------************************************************-------比如--------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----

void MyPrintfByte(unsigned char byte) //串口發(fā)送一個字節(jié)
{
USART_SendData(USART1, byte); //通過庫函數(shù) 發(fā)送數(shù)據(jù)
while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET); //等待發(fā)送完成,檢測 USART_FLAG_TC 是否置1
}

---------------------------------------------
void MyPrintfStr(unsigned char *s) //發(fā)送字符串 函數(shù)--指針--
{
uint8_t i=0; //定義一個局部變量 用來 發(fā)送字符串 ++運算

while(s[i]!='