成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【STM32】標(biāo)準(zhǔn)庫(kù)與HAL庫(kù)對(duì)照學(xué)習(xí)教程八--串口通信詳解

yck / 4878人閱讀

摘要:異步通信與同步通信異步通信異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過(guò)程。同步通信同步通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。配置串口設(shè)置為異步通信基礎(chǔ)參數(shù)波特率為。

一、前言

本篇文章是對(duì)單片機(jī)串口通信的詳講,串口通信作為STM32單片機(jī)的一個(gè)重要功能,在程序調(diào)試中發(fā)揮著重要的作用,本篇從通信基本原理講解開(kāi)始,一步一步讓您理解并會(huì)使用STM32的串口通信,實(shí)驗(yàn)程序包括標(biāo)準(zhǔn)庫(kù)與HAL庫(kù),例程為串口中斷通信實(shí)驗(yàn),您也可以點(diǎn)擊目錄跳轉(zhuǎn)到自己想看的內(nèi)容。

二、準(zhǔn)備工作

  • STM32F103開(kāi)發(fā)板(我用的是普中的STM32F103ZE開(kāi)發(fā)板)
  • cubemx軟件、keil 5(MDK)
  • USB轉(zhuǎn)串口模塊(CH340)

三、通信的基本概念

1、通信方式

通信的方式可以分為多種:

  • 按照數(shù)據(jù)傳送方式可分為串行通信和并行通信。
  • 按照通信的數(shù)據(jù)同步方式,可分為異同通信和同步通信。
  • 按照數(shù)據(jù)的傳輸方向又可分為單工、半雙工和全雙工通信。

下面我們就來(lái)簡(jiǎn)單介紹這幾種通信方式。

2、串行通信與并行通信

(1)串行通信

串行通信是指使用一條數(shù)據(jù)線,將數(shù)據(jù)一位一位地依次傳輸,每一位數(shù)據(jù)占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。

  • 優(yōu)點(diǎn):傳輸線少,長(zhǎng)距離傳送時(shí)成本低。
  • 缺點(diǎn):數(shù)據(jù)的傳送控制比并行通信復(fù)雜且速度相對(duì)較慢。

(2)并行通信

并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時(shí)進(jìn)行傳送,通常是8位、16位、32位等數(shù)據(jù)一起傳輸。

  • 優(yōu)點(diǎn):控制簡(jiǎn)單、傳輸速度快。
  • 缺點(diǎn):長(zhǎng)距離傳送時(shí)成本高且接收方的各位同時(shí)接收存在困難,抗干擾能力差 。

3、異步通信與同步通信

(1)異步通信

異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過(guò)程。
異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的間隙(時(shí)間間隔)是任意的。

優(yōu)點(diǎn):不要求收發(fā)雙方時(shí)鐘的嚴(yán)格一致,實(shí)現(xiàn)容易。
缺點(diǎn):每個(gè)字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高 。

(2)同步通信

同步通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。實(shí)現(xiàn)方法有外同步和自同步兩種。

優(yōu)點(diǎn):由于傳輸因此傳輸效率高。
缺點(diǎn):同步實(shí)現(xiàn)困難且開(kāi)銷大。

4、單工、半雙工與全雙工通信

(1)單工通信

單工是指數(shù)據(jù)傳輸僅能沿一個(gè)方向,就是一個(gè)設(shè)備只管發(fā)送,一個(gè)設(shè)備只管接收。

(2)半雙工通信

半雙工是指數(shù)據(jù)傳輸可以沿兩個(gè)方向,但需要分時(shí)進(jìn)行。也就是發(fā)送的時(shí)候不能接收,接收的時(shí)候不能發(fā)送。

(3)全雙工通信

全雙工是指數(shù)據(jù)可以同時(shí)進(jìn)行雙向傳輸。也就是發(fā)送的時(shí)候可以接收,接收的時(shí)候可以發(fā)送。

5、通信速率

衡量通信性能的一個(gè)非常重要的參數(shù)就是通信速率,通常以比特率(Bitrate)來(lái)表示。
比特率每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位/秒(bps)。
例如:每秒鐘傳送200個(gè)字符,而每個(gè)字符格式包含10位(1個(gè)起始位、1個(gè)停止位、8個(gè)數(shù)據(jù)位),這時(shí)的比特率為:10位×200個(gè)/秒 = 2000 bps

四、STM32F1的USART介紹

1、串口通信簡(jiǎn)介

串口通信(Serial Communication),是指外設(shè)和計(jì)算機(jī)之間,通過(guò)數(shù)據(jù)信號(hào)線、地線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通信方式,屬于串行通信方式。
串口是一種接口標(biāo)準(zhǔn),它規(guī)定了接口的電氣標(biāo)準(zhǔn),沒(méi)有規(guī)定接口插件電纜以及使用的協(xié)議。

2、USART簡(jiǎn)介

USART即通用同步異步收發(fā)器,它能夠靈活地與外部設(shè)備進(jìn)行全雙工數(shù)據(jù)交換。UART即通用異步收發(fā)器,它是在USART基礎(chǔ)上裁剪掉了同步通信功能。STM32F103ZET6芯片含有3個(gè)USART,2個(gè)UART外設(shè)。

3、USART結(jié)構(gòu)框圖

圖片在STM32F1xx中文參考手冊(cè) 通用同步異步收發(fā)器章節(jié)

結(jié)構(gòu)圖重點(diǎn)在框住的部分,通過(guò)寄存器USART_SRTXE、TC、RXNE位知道串口收發(fā)情況。

4、USART寄存器重點(diǎn)控制位

(1)TXE

TXE位USART_SR寄存器的第七位,為1時(shí),TDR寄存器中的數(shù)據(jù)已經(jīng)被轉(zhuǎn)移到移位寄存器,為0時(shí),TDR寄存器中的數(shù)據(jù)還沒(méi)有被轉(zhuǎn)移到移位寄存器復(fù)位時(shí)為1,TDR寄存器中有數(shù)據(jù)時(shí),該位立即為0。

(2)TC

TC位USART_SR寄存器的第六位,為1時(shí),移位寄存器中的數(shù)據(jù)發(fā)送完成,為0時(shí),移位寄存器還有數(shù)據(jù)。復(fù)位時(shí)為1需要手動(dòng)清0,或者進(jìn)行讀操作讓其為0。

(3)RXNE

當(dāng)接收完數(shù)據(jù)時(shí),該位為1,其他時(shí)候?yàn)?strong>0。

5、STM32與PC主機(jī)通信的方法

串口數(shù)據(jù)收發(fā)線要交叉連接,計(jì)算機(jī)的TXD要對(duì)應(yīng)單片機(jī)的RXD,計(jì)算機(jī)的RXD要對(duì)應(yīng)單片機(jī)的TXD,并且共GND。
如下圖:

五、USB轉(zhuǎn)串口模塊

單片機(jī)與電腦進(jìn)行通信需要用到USB轉(zhuǎn)串口模塊,因?yàn)殡娔X上沒(méi)有RXD、TXD引腳,并且電腦還要安裝CH340的驅(qū)動(dòng)。
市場(chǎng)常見(jiàn)的USB轉(zhuǎn)串口模塊

接上電腦,TX接單片機(jī)的RX,RX接單片機(jī)的TX,電源與地接到單片機(jī)上就可以串口通信了。
電腦上的CH340驅(qū)動(dòng)我放在網(wǎng)盤(pán)上了,有需要自己去下載。
https://pan.baidu.com/s/1bO7mpkwjkB19HXvmD0083Q
密碼:kpa6

六、標(biāo)準(zhǔn)庫(kù)使用串口中斷通信

一、配置步驟

(1)使能串口時(shí)鐘及GPIO端口時(shí)鐘
(2)GPIO端口模式設(shè)置,設(shè)置串口對(duì)應(yīng)的引腳為復(fù)用功能
(3)初始化串口參數(shù),包含波特率、字長(zhǎng)、奇偶校驗(yàn)等參數(shù)
(4)使能串口
(5)設(shè)置串口中斷類型并使能
(6)設(shè)置串口中斷優(yōu)先級(jí),使能串口中斷通道
(7)編寫(xiě)串口中斷服務(wù)函數(shù)

二、配置工程


(1)復(fù)制上一章的工程,并重命名為8、串口中斷通信。


(2)進(jìn)入工程文件,進(jìn)入APP文件,新建USART文件夾用來(lái)存放與串口相關(guān)的文件。


(3)打開(kāi)工程,新建文件,并命名為usart.h與usart.c。




(4)添加文件到目錄,并添加頭文件路徑。




(5)要使用串口需要添加相應(yīng)的文件




三、相關(guān)程序


mian.c

#include "LED.h"#include "Delay.h"#include "System.h"#include "usart.h"/**************************************************函數(shù)名:    main*函數(shù)功能: 主函數(shù)*輸入:     無(wú)  *返回值:   無(wú)**************************************************/int main(){		SysTick_Init(72);	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //搶占式優(yōu)先級(jí)與響應(yīng)式優(yōu)先級(jí)的分組	LED_Init();	USART1_Init(9600);	while(1)	{		  	}}

usart.h

#ifndef USART_H_#define USART_H_#include "stm32f10x.h"/************串口引腳************/#define USART1_GPIO_Port  GPIOA#define USART1_RX_Pin     GPIO_Pin_10#define USART1_TX_Pin     GPIO_Pin_9/************串口函數(shù)************/void USART1_Init(u32 bound);          //串口初始化void USART_SendBit(USART_TypeDef* USARTx,u16 Data);   //發(fā)送單個(gè)數(shù)據(jù)uint16_t USART_ReceiveBit(USART_TypeDef* USARTx);     //接收單個(gè)數(shù)據(jù)void USART_SendString(USART_TypeDef* USARTx,char *string); //發(fā)送字符串#endif

usart.c

#include "usart.h"/**************************************************函數(shù)名:     USART1_Init*函數(shù)功能:   串口1的初始化*輸入:       bound:波特率   *返回值:     無(wú)**************************************************/void USART1_Init(u32 bound){	GPIO_InitTypeDef GPIO_InitStruct;	USART_InitTypeDef USART_InitStruct;	NVIC_InitTypeDef NVIC_InitStruct;		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE); //時(shí)鐘使能		GPIO_InitStruct.GPIO_Pin = USART1_TX_Pin;      //發(fā)送引腳	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;   //復(fù)用推挽輸出	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //發(fā)送速度	GPIO_Init(USART1_GPIO_Port, &GPIO_InitStruct); //引腳初始化		GPIO_InitStruct.GPIO_Pin = USART1_RX_Pin;      //接收引腳	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入	GPIO_Init(USART1_GPIO_Port, &GPIO_InitStruct); //引腳初始化		USART_InitStruct.USART_BaudRate = bound; //波特率	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //無(wú)硬件數(shù)據(jù)流控制	USART_InitStruct.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //收發(fā)模式	USART_InitStruct.USART_Parity = USART_Parity_No; //沒(méi)有校驗(yàn)位	USART_InitStruct.USART_StopBits = USART_StopBits_1;  //一位停止位	USART_InitStruct.USART_WordLength = USART_WordLength_8b; //8位一個(gè)字節(jié)	USART_Init(USART1, &USART_InitStruct); //初始化串口		USART_Cmd(USART1, ENABLE);  //串口使能		USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  //接收中斷使能		NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;  //要打開(kāi)的中斷通道	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; //搶占式優(yōu)先級(jí)	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;   //相應(yīng)式優(yōu)先級(jí)	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;  //NVIC通道使能	NVIC_Init(&NVIC_InitStruct);		USART_ClearFlag(USART1, USART_FLAG_TC); //TC位初始值位1,要先清0}//直接使用串口發(fā)送接收函數(shù)會(huì)出現(xiàn)內(nèi)容覆蓋的問(wèn)題,所以需要我們重寫(xiě)函數(shù)/**************************************************函數(shù)名:      USART_SendBit*函數(shù)功能:    串口發(fā)送函數(shù)*輸入:        Data:發(fā)送的數(shù)據(jù)*返回值:      無(wú)**************************************************/void USART_SendBit(USART_TypeDef* USARTx,u16 Data)   {	USART_SendData(USARTx, Data);		//while(!USART_GetFlagStatus(USARTx, USART_FLAG_TXE));  //要等待數(shù)據(jù)全部轉(zhuǎn)到移位寄存器	//USART_ClearFlag(USARTx, USART_FLAG_TXE); //清空標(biāo)志位		while(!USART_GetFlagStatus(USARTx, USART_FLAG_TC));//要等待數(shù)據(jù)全部發(fā)出	USART_ClearFlag(USARTx, USART_FLAG_TC); //清空標(biāo)志位}/**************************************************函數(shù)名:       USART_ReceiveBit*函數(shù)功能:     串口接收函數(shù)*輸入:         USARTx:串口*返回值:       接收到的數(shù)據(jù)**************************************************/uint16_t USART_ReceiveBit(USART_TypeDef* USARTx){	while(!USART_GetFlagStatus(USARTx, USART_FLAG_RXNE)); //等待接收的數(shù)據(jù)全部接收	USART_ClearFlag(USARTx, USART_FLAG_RXNE);	return USART_ReceiveData(USARTx);}/**************************************************函數(shù)名:        USART_SendString*函數(shù)功能:      串口發(fā)送字符串函數(shù)*輸入:          USARTx:串口,string:字符型指針*返回值:        無(wú)**************************************************/void USART_SendString(USART_TypeDef* USARTx,char *string){	while(*string)	{		USART_SendBit(USARTx,*string++);	}}/**************************************************函數(shù)名:         USART1_IRQHandler*函數(shù)功能:       串口中斷函數(shù)-將從電腦發(fā)送的數(shù)據(jù)發(fā)回給電腦*輸入:           無(wú)*返回值:         無(wú)**************************************************/void USART1_IRQHandler(){	u16 r;	if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)  //判斷中斷標(biāo)志	{		r = USART_ReceiveData(USART1);		USART_SendBit(USART1,r);	}}

四、實(shí)驗(yàn)效果

七、HAL庫(kù)使用串口中斷通信

一、cubemx配置工程


(1) 打開(kāi)cubemx,新建工程,選擇自己的芯片。


(2) 配置RCC,選擇外部高速時(shí)鐘


(3) 配置時(shí)鐘樹(shù)。


(4) 配置串口

  • Mode設(shè)置為異步通信(Asynchronous)
  • 基礎(chǔ)參數(shù):波特率為115200 Bits/s。傳輸數(shù)據(jù)長(zhǎng)度為8 Bit。奇偶檢驗(yàn)無(wú),停止位1 接收和發(fā)送都使能 (默認(rèn)的就行)
    打開(kāi)串口中斷


(5) 工程文件配置并生成工程




二、常用函數(shù)講解


  • HAL_UART_Transmit();串口發(fā)送數(shù)據(jù),使用超時(shí)管理機(jī)制
  • HAL_UART_Receive();串口接收數(shù)據(jù),使用超時(shí)管理機(jī)制
  • HAL_UART_Transmit_IT();串口中斷模式發(fā)送(只觸發(fā)一次中斷)
  • HAL_UART_Receive_IT();串口中斷模式接收(只觸發(fā)一次中斷)
  • HAL_UART_Transmit_DMA();串口DMA模式發(fā)送
  • HAL_UART_Transmit_DMA();串口DMA模式接收
  • HAL_UART_GetState();判斷接收與發(fā)送是否結(jié)束

相關(guān)參數(shù):

  • UART_HandleTypeDef *huart 串口的別名 如 : 我們使用串口USART1的別名就是huart1。
  • *pData 需要發(fā)送的數(shù)據(jù)
  • Size 發(fā)送的字節(jié)數(shù)
  • Timeout 最大發(fā)送時(shí)間
  • HAL_UART_STATE_BUSY_RX,接收完成標(biāo)志
  • HAL_UART_STATE_BUSY_TX,發(fā)送完成標(biāo)志

回調(diào)函數(shù)

  • void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);//接收中斷回調(diào)函數(shù)
  • HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //發(fā)送中斷回調(diào)函數(shù)
  • void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口發(fā)送一半中斷回調(diào)函數(shù)
  • void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//串口接收一半回調(diào)函數(shù)

串口中斷接收完成之后,會(huì)進(jìn)入該函數(shù),該函數(shù)為空函數(shù),用戶需自行修改。


三、主函數(shù)程序


#include "string.h"uint8_t Rx_String[100];    //接收字符串?dāng)?shù)組uint8_t Rx_Flag=0;         //接收字符串計(jì)數(shù)uint8_t Rx_buff;           //接收緩存

HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx_buff, 1);   //開(kāi)啟接收中斷

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){	if(huart == &huart1)	{		Rx_String[Rx_Flag++] = Rx_buff;  //接收字符		if(Rx_String[Rx_Flag-1] == 0x0A) //判斷是否接收結(jié)束		{			HAL_UART_Transmit(&huart1, (uint8_t *)&Rx_String, Rx_Flag,0xFFFF); //字符串發(fā)送			while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX); //判斷發(fā)送是否完畢			memset(Rx_String,0x00,sizeof(Rx_buff)); //清空接收字符串			Rx_Flag = 0; //清空計(jì)數(shù)器		}		HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx_buff, 1);   //再開(kāi)啟接收中斷	}}

四、實(shí)驗(yàn)效果

八、關(guān)于printf重定向

C語(yǔ)言中printf函數(shù)默認(rèn)輸出設(shè)備是顯示器,如果要實(shí)現(xiàn)在
串口或者LCD上顯示,必須重定義標(biāo)準(zhǔn)庫(kù)函數(shù)里調(diào)用的與輸出設(shè)備相關(guān)的函數(shù)。比如使用printf輸出到串口,需要將fputc里面的輸出指向串口。
這一過(guò)程就叫重定向。


對(duì)于標(biāo)準(zhǔn)庫(kù)
將這段程序加入主函數(shù)中

int fputc(int ch,FILE *p)  //函數(shù)默認(rèn)的,在使用printf函數(shù)時(shí)自動(dòng)調(diào)用{	USART_SendData(USART1,(u8)ch);		while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);	return ch;}int fgetc(FILE *p){  uint8_t ch = 0;  USART_SendData(USART1, ch);  return ch;}

并添加stdio.h頭文件,就可以使用C語(yǔ)言中的printf函數(shù)將字符串通過(guò)串口打印在電腦上了。


對(duì)于HAL庫(kù)
將這段程序加入主函數(shù)中

/**  * 函數(shù)功能: 重定向c庫(kù)函數(shù)printf到DEBUG_USARTx  * 輸入?yún)?shù): 無(wú)  * 返 回 值: 無(wú)  * 說(shuō)    明:無(wú)  */int fputc(int ch, FILE *f){  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);  return ch;} /**  * 函數(shù)功能: 重定向c庫(kù)函數(shù)getchar,scanf到DEBUG_USARTx  * 輸入?yún)?shù): 無(wú)  * 返 回 值: 無(wú)  * 說(shuō)    明:無(wú)  */int fgetc(FILE *f){  uint8_t ch = 0;  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);  return ch;}

并添加stdio.h頭文件,就可以使用C語(yǔ)言中的printf函數(shù)將字符串通過(guò)串口打印在電腦上了。


九、RS232補(bǔ)充說(shuō)明(選看)

1、接口標(biāo)準(zhǔn)

串口通信的接口標(biāo)準(zhǔn)有很多,有RS-232C、RS-232、RS-422A、RS-485等。常用的就是RS-232和RS-485。RS-232其實(shí)是RS-232C的改進(jìn),原理是一樣的。這里我們就以RS-232C接口進(jìn)行講解。
RS-232C是EIA(美國(guó)電子工業(yè)協(xié)會(huì))1969年修訂RS-232C標(biāo)準(zhǔn)。RS-232C定義了數(shù)據(jù)終端設(shè)備(DTE)與數(shù)據(jù)通信設(shè)備(DCE)之間的物理接口標(biāo)準(zhǔn)。
RS-232C接口規(guī)定使用25針連接器,簡(jiǎn)稱DB25,連接器的尺寸及每個(gè)插針的排列位置都有明確的定義 。

2、邏輯電平規(guī)定

RS-232C對(duì)邏輯電平也做了規(guī)定,如下:

  • 在TXD和RXD數(shù)據(jù)線上,邏輯1為(-3)V到(-15)V的電壓,邏輯0為3V到15V的電壓。
  • 在RTS、CTS、DSR、DTR和DCD等控制線上,信號(hào)有效(ON狀態(tài))為3V到15V的電壓,信號(hào)無(wú)效(OFF狀態(tài))為(-3)V到(-15V)的電壓。

由此可見(jiàn),RS-232C是用正負(fù)電壓來(lái)表示邏輯狀態(tài),與晶體管-晶體管邏輯集成電路(TTL)以高低電平表示邏輯狀態(tài)的規(guī)定正好相反

到這里就結(jié)束啦!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/124044.html

相關(guān)文章

  • STM32串口通信HAL庫(kù) 二)

    摘要:緊接著上一篇博文。。。編寫(xiě)串口中斷函數(shù)當(dāng)中斷發(fā)生的時(shí)候,程序就會(huì)執(zhí)行中斷服務(wù)函數(shù),我們?cè)谥袛喾?wù)函數(shù)中編寫(xiě)相應(yīng)的邏輯代碼就可以了。將以下代碼編寫(xiě)在中串口輸出重定義到注意頭文件需要包含標(biāo)準(zhǔn)庫(kù),也就是。 ...

    frontoldman 評(píng)論0 收藏0
  • STM32CubeMX學(xué)習(xí)教程之硬件I2C讀取光照度

    摘要:使用庫(kù)讀寫(xiě)環(huán)境光照度傳感器本文將教大家如何快速使用庫(kù)讀取光照度數(shù)據(jù)。五實(shí)驗(yàn)樣機(jī)測(cè)試展示通過(guò)之前配置好的面板,通過(guò)涂鴉智能進(jìn)行配網(wǎng)實(shí)時(shí)采集光照度傳感器的數(shù)據(jù)。 使用STM32 HAL庫(kù)讀寫(xiě)環(huán)境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫(kù)讀取光照度數(shù)據(jù)。 實(shí)現(xiàn)功能:通...

    tinylcy 評(píng)論0 收藏0
  • 使用STM32CubeMX初始化STM32F031F6Px系列

    摘要:利用可視化界面來(lái)進(jìn)行的相關(guān)配置,所以時(shí)鐘滴答定時(shí)器串口等就不用根據(jù)數(shù)據(jù)手冊(cè)去操作標(biāo)準(zhǔn)庫(kù)甚至是寄存器了,可以通過(guò)軟件直接生成。 使用STM32CubeMX初始化ST...

    Zhuxy 評(píng)論0 收藏0
  • 串口通信中關(guān)鍵知識(shí)點(diǎn)4

    摘要:串口波特率設(shè)置。串口的狀態(tài)可以通過(guò)狀態(tài)寄存器讀取。關(guān)閉接收完成中斷使能中斷通道搶占優(yōu)先級(jí),子優(yōu)先級(jí)第五編寫(xiě)中斷服務(wù)函數(shù)第六串口數(shù)據(jù)接收和發(fā)送發(fā)送與接收是通過(guò)數(shù)據(jù)寄存器來(lái)實(shí)現(xiàn)。 ? ? ? ?串口基本配置的寄存器,配置過(guò)程總結(jié)為: 1、串口時(shí)鐘使能。這里的串口1設(shè)置是APB2ENR寄存器的第4...

    zgbgx 評(píng)論0 收藏0
  • STM32學(xué)習(xí)筆記 第二章 STM32資源介紹

    摘要:總線掛載的外設(shè)有等。外設(shè)地址映射片上外設(shè)區(qū)分為三條總線,根據(jù)外設(shè)速度的不同,不同總線掛載著不同的外設(shè),掛載低速外設(shè),和掛載高速外設(shè)。 第二章 STM32資源介紹 2...

    G9YH 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<