日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年08月13日(星期三)

2018年08月13日 | STM32F407串口2配置

發(fā)布者:來來去去來來 來源: eefocus關(guān)鍵字:STM32F407  串口2  配置 手機看文章 掃描二維碼
隨時隨地手機看文章

本文主要是配置STM32F407VET6的串口2,對應(yīng)PA2,PA3。大家都知道正點原子配置了串口1,之前一直想配置串口3,可惜一直沒成功,嘗試了串口2,4,5,6的配置,都沒有問題,就3不行,我懷疑我的板子有問題,不過先把已解決的問題記錄下來,以后解決了,再寫。特別注意:printf函數(shù)已經(jīng)在庫函數(shù)中和usart1配置好了,現(xiàn)在是使用usart2,所以printf不可以在串口2的收發(fā)函數(shù)里出現(xiàn),不然串口1會對串口2產(chǎn)生干擾。

目前主要是用庫函數(shù),偶爾使用寄存器,還是太懶了,實在是看不進(jìn)去寄存器手冊,言歸正傳,配置串口的步驟,原子大神已經(jīng)描述的相當(dāng)清楚了.

包括以下步驟: 1.配置串口時鐘和和GPIO時鐘使能。

2.設(shè)置引腳復(fù)用器映射。

3.GPIO端口模式設(shè)置

4.串口參數(shù)初始化:設(shè)置波特率,字長,奇偶校驗等參數(shù)

5.初始化NVIC.

6.開啟中斷

7.使能串口 

中斷配置: 當(dāng)接收到從電腦發(fā)過來的數(shù)據(jù),把接收到的數(shù)據(jù)保存在 USART2_RX_BUF 中,同時在接收狀態(tài)寄存器(USART2_RX_STA)中計數(shù)接收到的有效數(shù)據(jù) 個數(shù),當(dāng) 收到回車(回車的表示由 2個字節(jié)組成:0X0D 和 0X0A)的第一個字節(jié) 0X0D 時,計數(shù)器將不再增加,等待 0X0A 的到來,而如果 0X0A 沒有來到, 則認(rèn)為這次接收失敗,重新開始下一次接收。如果順利接收到 0X0A,則標(biāo)記 USART_RX_STA 的第 15 位,這樣完成一次接收,并等待該位被其他程序清 除,從而開始下一次的接收,而如果遲遲沒有收到0X0D,那么在接收數(shù)據(jù)超過USART_REC_LEN的時候,則會丟棄前面的數(shù)據(jù),重新接收。

usart2.c   usart2.h   main.c代碼如下:

//---------usart2.c文件-----------------------------------------------------------------------------------------------------------------------------------//

//初始化IO 串口2   

#include "delay.h"
#include "usart3.h"
#include "stdarg.h"  
#include "stdio.h"  
#include "string.h"  
//串口發(fā)送緩存區(qū) 
__align(8) u8 USART2_TX_BUF[USART2_MAX_SEND_LEN]; //發(fā)送緩沖,最大USART2_MAX_SEND_LEN字節(jié)
#ifdef USART2_RX_EN   //如果使能了接收    
//串口接收緩存區(qū) 
u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //接收緩沖,最大USART2_MAX_RECV_LEN個字節(jié).


u16 USART2_RX_STA = 0;
void USART2_IRQHandler(void)
{
u8 res;    
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
{
res =USART_ReceiveData(USART2);//(USART1->DR); //讀取接收到的數(shù)據(jù)

if((USART2_RX_STA&0x8000)==0)//接收未完成
{
if(USART2_RX_STA&0x4000)//接收到了0x0d
{
if(res!=0x0a)USART2_RX_STA=0;//接收錯誤,重新開始
else USART2_RX_STA|=0x8000; //接收完成了 
}
else //還沒收到0X0D

if(res==0x0d)USART2_RX_STA|=0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=res ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_MAX_RECV_LEN-1))USART2_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收  
}  
}
}    

   
}  
#endif 


//bound:波特率  
void usart2_init(u32 bound)
{  
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

//1.串口時鐘和和GPIO時鐘使能。
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2時鐘
//2.設(shè)置引腳復(fù)用器映射 
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2復(fù)用為USART2
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3復(fù)用為USART2  
//3.GPIO端口模式設(shè)置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA2和GPIOA3初始化
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//復(fù)用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽復(fù)用輸出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIOA2,和GPIOA3
//4.串口參數(shù)初始化:設(shè)置波特率,字長,奇偶校驗等參數(shù)
USART_InitStructure.USART_BaudRate = bound;//波特率一般設(shè)置為9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數(shù)據(jù)格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式
USART_Init(USART2, &USART_InitStructure); //初始化串口2參數(shù)
//5.初始化NVIC
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//搶占優(yōu)先級0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優(yōu)先級3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器
//6.開啟中斷
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//開啟中斷  
//7.使能串口 
USART_Cmd(USART2, ENABLE);                    //使能串口 
}

//------usart2.h-----------------------------------------------------------------------------------------------------------------------------------------------

#ifndef __USART2_H
#define __USART2_H  
#include "sys.h"  

#define USART2_MAX_RECV_LEN 400 //最大接收緩存字節(jié)數(shù)
#define USART2_MAX_SEND_LEN 400 //最大發(fā)送緩存字節(jié)數(shù)
#define USART2_RX_EN 1 //0,不接收;1,接收.

extern u8  USART2_RX_BUF[USART2_MAX_RECV_LEN]; //接收緩沖,最大USART2_MAX_RECV_LEN字節(jié)
extern u8  USART2_TX_BUF[USART2_MAX_SEND_LEN]; //發(fā)送緩沖,最大USART2_MAX_SEND_LEN字節(jié)
extern u16 USART2_RX_STA;   //接收數(shù)據(jù)狀態(tài)

void usart2_init(u32 bound); //串口2初始化 
//void TIM7_Int_Init(u16 arr,u16 psc);
void u2_printf(char* fmt, ...);
#endif


//----------main.c---------------------------------------------------------------------------------------------------------------------------------------------------------
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"  
#include "sram.h"   
#include "malloc.h" 
#include "usmart.h"  
#include "sdio_sdcard.h"    
#include "malloc.h" 
#include "w25qxx.h"    
#include "ff.h"  
#include "exfuns.h"
//串口3頭文件
#include "usart3.h"
#include "timer.h"
#include "string.h"
//STM32F407
//FATFS 實驗 -庫函數(shù)版本
/**SD卡管理變量***/
//u8 textFileBuffer[] = "Chinese and English test strings \r\nChinese and English test strings2"; 
//FIL fsrc, fdst;      /* file objects */
//char path0[512]="0:";
//char buffer[4096];   /* file copy buffer */
/**主函數(shù)變量**/
u8 t=0;
/**自定義函數(shù)聲明**/ 
void system_init(void); 
void SD_TEST(void);
int main(void)
{  
u8 t;
u8 len; 
u16 times=0; 
u8 USART_RX_BUF1[10] = {'0','1','2','3','4','5','6','7','8','\n'};     //接收緩沖,最大USART_REC_LEN個字節(jié). 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級分組2
delay_init(168); //延時初始化 
//uart_init(115200); //串口初始化波特率為115200
usart2_init(9600);
LED_Init();   //初始化與LED連接的硬件接口  
while(1)

if(USART2_RX_STA&0x8000)
{   
len=USART2_RX_STA&0x3fff;//得到此次接收到的數(shù)據(jù)長度
for(t=0;t{
USART_SendData(USART2, USART2_RX_BUF[t]);         //向串口1發(fā)送數(shù)據(jù)
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待發(fā)送結(jié)束
}
USART2_RX_STA=0;
}else
{
times++;
if(times%50==0)
{
for(t=0;t<10;t++)
{
USART_SendData(USART2, USART_RX_BUF1[t]);         //向串口1發(fā)送數(shù)據(jù)
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待發(fā)送結(jié)束
}
}
if(times%30==0)LED0=!LED0;//閃爍LED,提示系統(tǒng)正在運行.
delay_ms(10);   
}

}

//---------------------------------------------------------------------------------------------------------------------------------------------

在主函數(shù)main.c里還有部分SD卡實驗的頭文件和變量聲明,不用管,去掉也沒關(guān)系。


關(guān)鍵字:STM32F407  串口2  配置 引用地址:STM32F407串口2配置

上一篇:STM32F1的5個串口使用方法
下一篇:STM32用串口(USB串口)下載程序的方法

推薦閱讀

據(jù)麻省理工學(xué)院報道,他們的研究人員正在使用最新的機器學(xué)習(xí)技術(shù),通過減少有毒化療和放射治療膠質(zhì)母細(xì)胞瘤(最具侵略性的腦癌)緩解患者在治療中的痛苦。膠質(zhì)母細(xì)胞瘤是一種出現(xiàn)在腦或脊髓中的惡性腫瘤,患者存活率一般不超過五年,而且必須要忍受放射治療,同時每月服用多種藥物。醫(yī)療專業(yè)人員通常會使用最大安全藥物劑量以盡可能地縮小腫瘤,但這些強效藥...
近年來,AIoT這一詞匯漸漸活躍在人們的視野中。所謂的AIoT,即AI+I(xiàn)oT,意思是將人工智能技術(shù)與物聯(lián)網(wǎng)技術(shù)相結(jié)合,形成新的一門融合學(xué)科。 伴隨著人工智能技術(shù)的發(fā)展,傳統(tǒng)物聯(lián)網(wǎng)設(shè)備將趨向于智能化,從而形成AIoT人工智能物聯(lián)網(wǎng),使“萬物互聯(lián)”向“萬物智聯(lián)”進(jìn)化。 當(dāng)然,技術(shù)的發(fā)展與市場需求是密不可分的。人們面對智能化應(yīng)用的需求越來越多,AIoT就...
在中學(xué)物理電路知識中,用簡易電路圖表示電路的實際連接情況,而在單片機硬件連接上,我們則用原理圖來表示單片機的引腳與開發(fā)板板上的芯片等相關(guān)硬件的引腳通過電路板上的覆銅線兩者相連。 1.回顧單片機入門往往是從點亮一盞燈開始,我們在中學(xué)時做物理電路實驗用電池點亮燈泡時,只是隨便將電燈泡+電阻+開關(guān)+電池通過導(dǎo)線連成回路接通開關(guān)就可以點亮了。...

史海拾趣

問答坊 | AI 解惑

Msp430 四系列PDF集合

包含四系列所有的PDF…

查看全部問答∨

第一塊DSP板的設(shè)計點滴-轉(zhuǎn)

從2006.8.1開始正式接觸DSP到現(xiàn)在也已經(jīng)一個多月了,從開始的在自己的開發(fā)板上調(diào)試熟悉DSP到現(xiàn)在要自己設(shè)計DSP,真的是很不容易.我想把在設(shè)計中遇到的問題和常用的電路芯片選擇歸納如下: 1.電源部分  使用了AC-DC5V的變壓器,在引入板子的 ...…

查看全部問答∨

I2C問題

i2c出現(xiàn)這樣的錯誤:ERROR: IIC_Write: send slave address fail! 那一段write的驅(qū)動代碼是這樣的: DWORD IIC_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes) {         UINT32 count, ret;     &nb ...…

查看全部問答∨

還是關(guān)于串口通信的問題

我想串口發(fā)送數(shù)據(jù) 00 11 22 33 44 55 66 77 88 99 11 22 33 44 55 有時候接收正常,但有時候會當(dāng)成兩幀,比如用串口調(diào)試助手接收成這個樣子: [2008:11:16:16:46:05]00 11 [2008:11:16:16:46:05]22 33 44 55 66 77 88 99 11 22 33 44 55 請問 ...…

查看全部問答∨

誰有支持1G microSD卡的spec,發(fā)我一份謝謝

   microSD的讀寫命令和SD卡的讀寫命令應(yīng)該是一樣的對吧,我現(xiàn)在用SPI操作microSD卡有問題 上邊是應(yīng)用的電路 現(xiàn)在如果我上拉MISO 和MOSI的話 讀取到的數(shù)據(jù)都是1 如果不上拉的話,讀取到的都是0,現(xiàn)在很郁悶,不知道怎么個情況,是不是卡 ...…

查看全部問答∨

DSP builder里加法模塊出現(xiàn)錯誤!

在使用DSP里面的加法模塊做仿真時提示錯誤為Could not infer a type for port fir16/Parallel Adder Subtractor:data.這個是怎么回事?。空圶DJM指點,我設(shè)計的是FIR濾波器,不能識別端口數(shù)據(jù)是什么意思呢?是不是哪里設(shè)置錯誤了?…

查看全部問答∨

硬件特殊功能寄存器編程思路和RAM使用的問題?請各位大人

看了一下STM32的庫,對于其中的關(guān)于硬件的特殊功能寄存器的設(shè)置都是通過:1、定義一個和實際硬件地址相鏡像的全局結(jié)構(gòu)體變量。2、設(shè)置結(jié)構(gòu)體的各個變量相對應(yīng)的參數(shù)。3、把結(jié)構(gòu)體整體復(fù)制到硬件特殊功能寄存器。個人理解,當(dāng)結(jié)構(gòu)體定義的時候 ...…

查看全部問答∨

[灌水]報到一下,醫(yī)療電子版塊版主

報到一下,呵呵,歡迎大家多多指教,多提建議?!?

查看全部問答∨

【轉(zhuǎn)自淘e淘版】贈送MSP430 USB仿真器 PCB空板

剛在咱們論壇淘e淘版上看到的,有兄弟贈送MSP430 USB仿真器 PCB空板,鏈接如下大家趕緊了!https://bbs.eeworld.com.cn/viewthread.php?tid=307509…

查看全部問答∨

大俠們請進(jìn)啦~~~

如果程序中要用到的USART2外設(shè)的TX,RX分別對應(yīng)PA2,PA3,PA2,PA3引腳接了其他設(shè)備,但是為了還要用USART2, 就用這個“RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO”就打開了GPIOD重映射功能把USART2設(shè)備的TX,RX映射到PD5,PD6上, 我想問的是: ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

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