国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

STM32一文通(8) 串口通訊

發(fā)布者:Quail最新更新時(shí)間:2025-01-14 來(lái)源: jianshu關(guān)鍵字:STM32  串口通訊  PC通訊 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一.原生串口通訊

  • 原生的串口通信主要是控制器跟串口的設(shè)備或者傳感器通信,不需要經(jīng)過(guò)電平轉(zhuǎn)換芯片來(lái)轉(zhuǎn)換電平,直接就用TTL電平通信

  • 比如:  GPS模塊、GSM模塊、串口轉(zhuǎn)WIFI模塊、HC04藍(lán)牙模塊

二. 串口與PC通訊

  • USB轉(zhuǎn)串口主要用于設(shè)備跟電腦通信

  • 電平轉(zhuǎn)換芯片一般有CH340、PL2303、CP2102、FT232

  • 使用的時(shí)候電腦端需要安裝電平轉(zhuǎn)換芯片的驅(qū)動(dòng)

三. RS232標(biāo)準(zhǔn)串口通訊

  • RS232標(biāo)準(zhǔn)串口主要用于工業(yè)設(shè)備直接通信

  • 電平轉(zhuǎn)換芯片一般有MAX3232,SP3232

四. STM32串口

1. 內(nèi)部結(jié)構(gòu)

寄存器功能
TX數(shù)據(jù)發(fā)送
RX數(shù)據(jù)接收
SCLK時(shí)鐘,僅同步通信時(shí)使用(不常用)
nRTS發(fā)送請(qǐng)求(不常用)
nCTS允許發(fā)送 (不常用)

2. 串口引腳分布

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

3. 串口引腳重定義

參見(jiàn)復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)

4. 串口寄存器

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

USART_DR, 9位有效
USART_DR一個(gè)地址對(duì)應(yīng)了兩個(gè)物理內(nèi)存。包含一個(gè)發(fā)送數(shù)據(jù)寄存器TDR和一個(gè)接收數(shù)據(jù)寄存器RDR。

(2). 串口數(shù)據(jù)寄存器  USART_CR1 USART_CR2 用來(lái)配置串口

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

五. 串口相關(guān)結(jié)構(gòu)體

1. 串口初始化結(jié)構(gòu)體   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:  設(shè)置波特率,如9600,115200等

  • USART_WordLength: 設(shè)置數(shù)據(jù)長(zhǎng)度。具體值:USART_WordLength_8b 或 USART_WordLength_9b

  • USART_StopBits: 設(shè)置停止位大小

  • USART_Parity: 奇偶校驗(yàn)

  • USART_Mode: 設(shè)置收發(fā)使能

發(fā)送接收都使能

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


2.同步時(shí)鐘初始化結(jié)構(gòu)體 (用的少)

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;


六. 串口相關(guān)庫(kù)函數(shù)

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

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

示例:

USART_InitStructure.USART_BaudRate=115200; //設(shè)置波特率

USART_InitStructure.USART_WordLength=USART_WordLength_8b; //設(shè)置數(shù)據(jù)長(zhǎng)度

USART_InitStructure.USART_StopBits=USART_StopBits_1; //設(shè)置停止位長(zhǎng)度

USART_InitStructure.USART_Parity=USART_Parity_No; //設(shè)置奇偶校驗(yàn)位

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //設(shè)置硬件流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //設(shè)置收發(fā)使能

USART_Init(USART2, &USART_InitStructure);

USART_Cmd(USART2, ENABLE);


2. 中斷配置函數(shù)  USART_ITConfig()

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

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

3. 串口使能函數(shù) USART_Cmd

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)

4. 數(shù)據(jù)發(fā)送函數(shù) USART_SendData()

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)

5. 數(shù)據(jù)接收函數(shù)  USART_ReceiveData

uint16_t USART_ReceiveData(USART_TypeDef* USARTx)

6.中斷狀態(tài)位獲取函數(shù) USART_GetITStatus

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)

7. 編程方法

例子:

  • 完整的串口發(fā)送, 可以printf, 可以發(fā)送 8位字 16位半字節(jié) 字符串等

  • 中斷接收功能 ,  當(dāng)有外部數(shù)據(jù)輸入時(shí)會(huì)產(chǎn)生中斷, 中斷后將得到的 字 再發(fā)送出去,同時(shí)點(diǎn)亮RGB

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

psb_usart.h文件(這個(gè)文件將5個(gè)串口都定義好了, 通過(guò)選擇編譯來(lái)確定串口)

#ifndef __BSP_USART_H

#define __BSP_USART_H


#include 'stm32f10x.h'

#include


//用哪個(gè)串口就把哪個(gè)置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]
關(guān)鍵字:STM32  串口通訊  PC通訊 引用地址:STM32一文通(8) 串口通訊

上一篇:為什么STM32中運(yùn)行的C程序執(zhí)行某些函數(shù)時(shí)死機(jī)?
下一篇:stm32固件庫(kù)UART操作

推薦閱讀最新更新時(shí)間:2025-04-29 11:04

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

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved