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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2134|回復: 1
收起左側

STM32串口學習_01 -CPU小白

[復制鏈接]
ID:689247 發表于 2021-7-28 17:57 | 顯示全部樓層 |閱讀模式
一.STM32串口介紹     
   a.串口的數據包格式為 起始位+數據位+校驗位+停止位,所以一般需要設置數據位為8,校驗位為1,停止位為1。我們再發送過程中只發送數據,其他的都由硬件來完成了,所以通信的雙方在數據包格式配置相同時才能正確通信。
   b.除去數據包格式設置一樣外,因為串口大多數都是用異步通信,由于沒有時鐘信號,所以2個通信設備需約定好波特率,常見的有4800、9600、115200等,波特率一致時才能正確通信。
   c.stm32的庫文件中將這些需要配置的參數都寫在了USART_InitTypeDef 結構體中,我們只要對其進行賦值,再調用函數USART_Init(),USART_Init函數會將USART_InitTypeDef 結構體中的數據寫入相應的寄存器,這樣就完成了對32串口的配置。

二.串口初始化(統一初始化)
   a.串口配置時,只有少數值需要時常更改,大部分都是重復內容,因此將常用的這些值做為參數傳入。這樣調用一個函數可以對所有的串口進行賦值。(串口使用的GPIO在后續的文章中統一配置)借鑒前輩的代碼。
   b.串口初始化流程   開外設時鐘->配置引腳(統一配置)->配置參數 ->使能中斷 ->使能串口

void User_Usart_Init(USART_TypeDef* USARTx, u32 BaudRate, u16 WordLength, u16 StopBits, u16 Parity)
{
    USART_InitTypeDef USART_InitStructure;
    USART_ClockInitTypeDef USART_ClockInitStructure ;

    if(USARTx == USART1)
    {
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);// Enable USART1使能或者失能APB2外設時鐘  高速72MHz
    }
    else if(USARTx == USART2)
    {
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//  Enable USART2使能或者失能APB1外設時鐘    低速36MHz
    }
    else if(USARTx == USART3)
    {
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//  Enable USART3使能或者失能APB1外設時鐘    低速36MHz
    }
    else if(USARTx == UART4)
    {
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);//  Enable USART4使能或者失能APB1外設時鐘    低速36MHz
    }
    else if(USARTx == UART5)
    {
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);//  Enable USART5使能或者失能APB1外設時鐘    低速36MH
    }

    USART_DeInit(USARTx);

    USART_InitStructure.USART_BaudRate = BaudRate;               //波特率
    USART_InitStructure.USART_WordLength = WordLength;        //數據長度
    USART_InitStructure.USART_StopBits = StopBits;                  //一個停止位
    USART_InitStructure.USART_Parity = Parity;                         //無校驗
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //禁止硬件流控制
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //Receive and transmit enabled
    USART_Init(USARTx, &USART_InitStructure);                        // Configure the USART1
   
    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;        //USART Clock disabled
    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;            //USART CPOL: Clock is active low
    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;         //USART CPHA: Data is captured on the second edge
    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;     //USART LastBit: The clock pulse of the last data bit is not output to the SCLK pin
    USART_ClockInit(USARTx, &USART_ClockInitStructure);
    USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);                  //允許接收寄存器非空中斷
    USART_Cmd(USARTx, ENABLE);                                                // Enable USARTx
}

三.拓展待完成
    a.關于不同的芯片串口的數量不同,此時可以使用#ifdef和#endif來解決此問題。
    b.以下程序只是測試使用,代碼較亂,串口中斷部分,文章借用了正點原子的串口中斷部分。
    c.會分三部記錄串口的日常使用,后兩部分為中斷以及讀書的記錄,會在第三部分完善代碼并上傳
    d.第一次發帖記錄學習,不恰當的地方一起討論學習。

代碼下載: 測試.7z (174.09 KB, 下載次數: 5)
回復

使用道具 舉報

ID:73435 發表于 2021-7-29 09:35 | 顯示全部樓層
有很多STM32的例程,官方的庫也提供了串口示例,看一看例程自己在敲幾遍就會了,串口配置不是一個init就可以的,還有時鐘,io,中斷等相關的都要配置。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本理论片好看理论片 | 日韩精品一区二区三区四区视频 | 91视频免费黄 | 羞羞的视频网站 | 一级毛片观看 | 久久精品久久久久久 | 盗摄精品av一区二区三区 | www.亚洲 | 中文字幕 国产 | 精品日韩在线 | 亚洲一区二区av | 91精品国产综合久久香蕉922 | 国产目拍亚洲精品99久久精品 | 国产精品美女久久久久久免费 | 国产成人精品一区二区三 | 2019天天操 | av日韩在线播放 | 久热免费在线 | 国产日韩欧美精品一区二区三区 | 亚洲午夜久久久 | 一级国产精品一级国产精品片 | 亚洲一区二区三区在线播放 | 日韩免费一区二区 | 国产一区二区三区在线 | 国产精品久久久久久52avav | 国产一区二区三区欧美 | 国产精品不卡一区 | 国产一区二区影院 | 超碰人人人 | 九九热最新地址 | 91精品国产综合久久久久 | 精品网| 久久久噜噜噜久久中文字幕色伊伊 | 激情 婷婷| 日韩欧美视频在线 | 中文二区 | 色综网 | 精品国产不卡一区二区三区 | 免费精品久久久久久中文字幕 | 亚洲电影一区二区三区 | 国产精品一区三区 |