娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32一文通(8) 串口通訊

發布者:Quail最新更新時間:2025-01-14 來源: jianshu關鍵字:STM32  串口通訊  PC通訊 手機看文章 掃描二維碼
隨時隨地手機看文章

一.原生串口通訊

  • 原生的串口通信主要是控制器跟串口的設備或者傳感器通信,不需要經過電平轉換芯片來轉換電平,直接就用TTL電平通信

  • 比如:  GPS模塊、GSM模塊、串口轉WIFI模塊、HC04藍牙模塊

二. 串口與PC通訊

  • USB轉串口主要用于設備跟電腦通信

  • 電平轉換芯片一般有CH340、PL2303、CP2102、FT232

  • 使用的時候電腦端需要安裝電平轉換芯片的驅動

三. RS232標準串口通訊

  • RS232標準串口主要用于工業設備直接通信

  • 電平轉換芯片一般有MAX3232,SP3232

四. STM32串口

1. 內部結構

寄存器功能
TX數據發送
RX數據接收
SCLK時鐘,僅同步通信時使用(不常用)
nRTS發送請求(不常用)
nCTS允許發送 (不常用)

2. 串口引腳分布

注意:串口一是APB2總線, 其他是APB1總線

3. 串口引腳重定義

參見復用重映射和調試I/O配置寄存器(AFIO_MAPR)

4. 串口寄存器

(1). 串口數據寄存器  USART_DR

USART_DR, 9位有效
USART_DR一個地址對應了兩個物理內存。包含一個發送數據寄存器TDR和一個接收數據寄存器RDR。

(2). 串口數據寄存器  USART_CR1 USART_CR2 用來配置串口

(3).   串口波特率寄存器USART_BRR

五. 串口相關結構體

1. 串口初始化結構體   USART_InitTypeDef

typedef struct

{

  uint32_t USART_BaudRate;            /*!< This member configures the USART communication baud rate.

                                           The baud rate is computed using the following formula:

                                            - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate)))

                                            - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */


  uint16_t USART_WordLength;          /*!< Specifies the number of data bits transmitted or received in a frame.

                                           This parameter can be a value of @ref USART_Word_Length */


  uint16_t USART_StopBits;            /*!< Specifies the number of stop bits transmitted.

                                           This parameter can be a value of @ref USART_Stop_Bits */


  uint16_t USART_Parity;              /*!< Specifies the parity mode.

                                           This parameter can be a value of @ref USART_Parity

                                           @note When parity is enabled, the computed parity is inserted

                                                 at the MSB position of the transmitted data (9th bit when

                                                 the word length is set to 9 data bits; 8th bit when the

                                                 word length is set to 8 data bits). */

 

  uint16_t USART_Mode;                /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.

                                           This parameter can be a value of @ref USART_Mode */


  uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled

                                           or disabled.

                                           This parameter can be a value of @ref USART_Hardware_Flow_Control */

} USART_InitTypeDef;


  • USART_BaudRate:  設置波特率,如9600,115200等

  • USART_WordLength: 設置數據長度。具體值:USART_WordLength_8b 或 USART_WordLength_9b

  • USART_StopBits: 設置停止位大小

  • USART_Parity: 奇偶校驗

  • USART_Mode: 設置收發使能

發送接收都使能

USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //發送接收都使能


2.同步時鐘初始化結構體 (用的少)

typedef struct

{


  uint16_t USART_Clock;   /*!< Specifies whether the USART clock is enabled or disabled.

                               This parameter can be a value of @ref USART_Clock */


  uint16_t USART_CPOL;    /*!< Specifies the steady state value of the serial clock.

                               This parameter can be a value of @ref USART_Clock_Polarity */


  uint16_t USART_CPHA;    /*!< Specifies the clock transition on which the bit capture is made.

                               This parameter can be a value of @ref USART_Clock_Phase */


  uint16_t USART_LastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted

                               data bit (MSB) has to be output on the SCLK pin in synchronous mode.

                               This parameter can be a value of @ref USART_Last_Bit */

} USART_ClockInitTypeDef;


六. 串口相關庫函數

1. 串口初始化函數  USART_Init()

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

示例:

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(USART2, &USART_InitStructure);

USART_Cmd(USART2, ENABLE);


2. 中斷配置函數  USART_ITConfig()

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)

例:使能接受完畢中斷USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

3. 串口使能函數 USART_Cmd

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)

4. 數據發送函數 USART_SendData()

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)

5. 數據接收函數  USART_ReceiveData

uint16_t USART_ReceiveData(USART_TypeDef* USARTx)

6.中斷狀態位獲取函數 USART_GetITStatus

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)

7. 編程方法

例子:

  • 完整的串口發送, 可以printf, 可以發送 8位字 16位半字節 字符串等

  • 中斷接收功能 ,  當有外部數據輸入時會產生中斷, 中斷后將得到的 字 再發送出去,同時點亮RGB

  • 可以控制RGB燈的亮滅, PC端輸入:0,1,2可以點亮RGB~

psb_usart.h文件(這個文件將5個串口都定義好了, 通過選擇編譯來確定串口)

#ifndef __BSP_USART_H

#define __BSP_USART_H


#include 'stm32f10x.h'

#include


//用哪個串口就把哪個置1

#define DEBUG_USART1     1

#define DEBUG_USART2     0

#define DEBUG_USART3     0

#define DEBUG_USART4     0

#define DEBUG_USART5     0


#if DEBUG_USART1

// 串口1-USART1

#define  DEBUG_USARTx                   USART1

#define  DEBUG_USART_CLK                RCC_APB2Periph_USART1

#define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd

#define  DEBUG_USART_BAUDRATE           115200


// USART GPIO 引腳宏定義

#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)

#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

    

#define  DEBUG_USART_TX_GPIO_PORT       GPIOA   

#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9

#define  DEBUG_USART_RX_GPIO_PORT       GPIOA

#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10


#define  DEBUG_USART_IRQ                USART1_IRQn

#define  DEBUG_USART_IRQHandler         USART1_IRQHandler


#elif DEBUG_USART2

//串口2-USART2

#define  DEBUG_USARTx                   USART2

#define  DEBUG_USART_CLK                RCC_APB1Periph_USART2

#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd

#define  DEBUG_USART_BAUDRATE           115200


// USART GPIO 引腳宏定義

#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)

#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

    

#define  DEBUG_USART_TX_GPIO_PORT       GPIOA   

#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_2

#define  DEBUG_USART_RX_GPIO_PORT       GPIOA

#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_3


#define  DEBUG_USART_IRQ                USART2_IRQn

#define  DEBUG_USART_IRQHandler         USART2_IRQHandler


#elif DEBUG_USART3

//串口3-USART3

#define  DEBUG_USARTx                   USART3

#define  DEBUG_USART_CLK                RCC_APB1Periph_USART3

#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd

#define  DEBUG_USART_BAUDRATE           115200

[1] [2] [3]
關鍵字:STM32  串口通訊  PC通訊 引用地址:STM32一文通(8) 串口通訊

上一篇:為什么STM32中運行的C程序執行某些函數時死機?
下一篇:stm32固件庫UART操作

推薦閱讀最新更新時間:2025-04-29 11:04

STM32 IO口模擬串口通訊
前陣子,調項目時需要用到低波特率串口通訊(300的波特率),才發下發現在正常情況下(PCLK1時鐘頻率為72M,PCLK2時鐘頻率為36M):STM32的USART0的最低波特率只能設置到1200,;而USART1最低波特率只能設置到600。怎么設置STM32的600或以下的波特率呢?有兩種方法:一種是改變外設時鐘頻率,而另一種方法就是使用IO口模擬串口通訊。今天就來講講,用IO口模擬串口通信! 1、串口傳輸協議 首先,必須要知道串口通訊時數據是怎樣傳輸的?這里以異步傳輸字符為例子,如下圖所示: 一般字符傳輸都采用:1位起始位,8位數據位,1位停止位,沒有校驗位 的形式傳輸,其他形式的這里不講。串口異步傳輸在空閑狀態時都必須是
[單片機]
<font color='red'>STM32</font> IO口模擬<font color='red'>串口通訊</font>
51單片機IO口模擬串口通訊C源程
51 IO口模擬串口通訊C源程 #include reg51.h sbit BT_SND =P1^0; sbit BT_REC =P1^1; #define MODE_QUICK #define F_TM F0 #define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0; sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2; sbit ACC3= ACC^3; sbit ACC4= ACC^4; sbit ACC5= ACC^5; sbit ACC6= ACC^6; sbit ACC7= ACC^
[單片機]
STM32 IIC雙機通信—— HAL庫硬件IIC版
  關于IIC的原理這里我就不多說了,網上有很多很好的解析,如果要看我個人對IIC的理解的話, 可以點擊查看 ,這里主要講一下怎樣利用STM32CubeMx實現IIC的通訊,經過個人實踐,感覺HAL庫的硬件IIC要比標準庫的穩定。好了,下面就從STM32CubeMx 配置開始一步步實現IIC通訊。   STM32CubeMx的配置,這里關于新建工程的步驟我就不細說了,如果還不會操作STM32CubeMx 的可以 點擊查看 , 這里主要對IIC的配置進行說明。      了解IIC的都知道,IIC通信有主從機之分,用兩片STM32進行IIC通信當然也不例外,不過使用STM32CubeMx 配置有一個好處,就是不用分別配置主從機,在
[單片機]
<font color='red'>STM32</font> IIC雙機通信—— HAL庫硬件IIC版
STM32新建匯編工程
學習stm32過程中,發現網上絕大部分的教程都是C語言的教程,當然在所有公司的嵌入式開發過程中也是絕大部分使用的都是C語言,但是也會有一部分需要直接操作內核寄存器的需求,例如RTOS中切換任務的時候,也確實沒有找到有人專門用匯編語言做項目,故而專門用匯編語言實現一些外設的操作,以此來熟練掌握匯編語言,方便后續繼續學習rtos或者深入單片機的內核做一些研究,文章會記錄開發的流程和實現的代碼,有任何問題也請指出,方便一起學習,共同進步 新建匯編工程 第一步點擊工程,新建,由于我的開發板是如下的型號,所以選擇對應的芯片 新建工程 第二步選擇啟動文件,keil官方給芯片提供了啟動文件,按照如下選擇,啟動文件是匯編語言實現的,主要的
[單片機]
L1 Keil5-MDK創建STM32工程
前置條件 Keil5-MDK軟件已經安裝、激活完成,安裝激活過程參考 頁面 。 詳情 1. 固件庫下載安裝 首先點開 ,查看所需ARM芯片的固件庫是否已安裝。 這里可以看到我們所需要的STM32F1系列ARM芯片的固件庫已安裝。 若沒有安裝,則需要到keil5的 官方網站 上下載所需的固件庫。 進入下載頁面 查找所需固件庫,并下載 固件庫安裝 安裝完成后打開keil5,點擊Project Manage Reload Software Packs加載已安裝固件庫,然后點進Pack Installer即可查看到已安裝的固件庫。 固件庫加載 2. 新建工程 點擊 ,在彈出的窗口中選擇工程存放
[單片機]
STM32電源框圖解析(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的區別)
STM32的工作電壓(VDD )為2.0~3.6V,通過內置的電壓調節器提供所需的1.8V電源,當主電源VDD 掉電后,通過VBAT 腳為實時時鐘(RTC)和備份寄存器提供電源(下圖為STM32F1**系列電源框架圖,STM32基本大同小異)。 1、名詞解析 可以看到上圖有VDD、VSS、VDDA、VSSA、VREF+等標識,這些是什么意思呢?有什么特點呢?如何看懂STM32系統的電源框架圖呢? 首先對名詞進行解析,如下所示: VCC電路的供電正電壓VDDD芯片的工作數字正電壓 GND電路的供電負電壓VSSD芯片的工作數字正電壓 VDD芯片的工作正電壓VREF+ADC基準參考正電壓 VSS芯片的工作負電壓VREF-ADC基
[單片機]
學習STM32開發,肯定少不了debug調試這一步驟
學習STM32開發,肯定少不了debug調試這一步驟。那么,本文帶你了解一下這個調試相關的知識。本文以STM32F1、Cortex-M3為例,其它系列芯片或內核,原理相同或類似。1概況在STM32中,有很多調試組件。使用它們可以執行各種調試功能,包括斷點、數據觀察點、 閃存地址重載以及各種跟蹤。STM32F1使用Cortex-M3內核,該內核內含硬件調試模塊,支持復雜的調試操作。硬件調試模塊允許內核在取指(指令斷點)或訪問數據(數據斷點)時停止。內核停止時,內核的內部狀態和系統的外部狀態都是可以查詢的。完成查詢后,內核和外設可以被復原,程序將繼續執行。當STM32F10x微控制器連接到調試器并開始調試時,調試器將使用內核的硬件調試
[單片機]
GD32單片機STM32遠程下載手機程序升級固件下載局域網網頁升級工具
GD32、STM32單片機,是我們最常見的一種MCU。通常我們在使用STM32單片機都會遇到程序在線升級下載的問題。 GD32/STM32單片機的在線下載通常需要以下幾種方式完成: 1、使用ST/GD提供的串口下載工具,本地完成固件的升級下載。 2、自行完成系統BootLoader的編寫,將系統程序分為BootLoader和APP兩個部分,BootLoader完成固件升級。 3、使用STM32/GD固件服務器,完成固件的升級,固件服務器https://simplewifi.taobao.com/ 幾種方式各有優缺點: 使用ST提供的方法進行固件升級,方法簡單,不需要額外的開發。但是,只能本地完成STM32單片機的升級。
[單片機]
GD32單片機<font color='red'>STM32</font>遠程下載手機程序升級固件下載局域網網頁升級工具
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 阿合奇县| 通山县| 布尔津县| 三门峡市| 盘锦市| 新竹市| 浠水县| 朔州市| 上饶市| 隆尧县| 芷江| 兴化市| 龙陵县| 彭山县| 蚌埠市| 桑日县| 阜宁县| 岑溪市| 柯坪县| 庄河市| 健康| 平潭县| 井研县| 临洮县| 东光县| 集安市| 偃师市| 柳州市| 永善县| 交口县| 伊春市| 饶河县| 应城市| 雷波县| 富顺县| 宜宾市| 汶上县| 遂溪县| 衡阳市| 鹤壁市| 南宫市|