本文主要是配置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)系。
上一篇:STM32F1的5個串口使用方法
下一篇:STM32用串口(USB串口)下載程序的方法
推薦閱讀
史海拾趣
ECI公司自成立以來,一直致力于技術(shù)創(chuàng)新和研發(fā)。在電子行業(yè)的早期,ECI就投入巨資研發(fā)先進(jìn)的半導(dǎo)體技術(shù),成功推出了多款高性能、低功耗的芯片產(chǎn)品。這些產(chǎn)品迅速在市場上獲得認(rèn)可,為公司贏得了良好的口碑。隨著技術(shù)的不斷進(jìn)步,ECI公司不斷推出更加先進(jìn)的電子產(chǎn)品,引領(lǐng)了電子行業(yè)的發(fā)展趨勢。
作為江西省首家提供高端應(yīng)用芯片整體解決方案的公司,聯(lián)智在集成電路設(shè)計領(lǐng)域展現(xiàn)了其強大的實力。公司不僅關(guān)注無線充電技術(shù),還致力于電源管理、低功耗藍(lán)牙、近場感應(yīng)等IoT(物聯(lián)網(wǎng))應(yīng)用芯片的研發(fā)和產(chǎn)業(yè)化。這種多元化的產(chǎn)品策略使聯(lián)智能夠滿足不同客戶的需求,進(jìn)一步鞏固了其在市場中的地位。
為了進(jìn)一步提升競爭力,ADC積極尋求與其他企業(yè)的戰(zhàn)略合作。通過與業(yè)界領(lǐng)先的企業(yè)建立合作關(guān)系,ADC成功整合了各方資源,共同研發(fā)新技術(shù)、新產(chǎn)品。這些合作不僅加速了ADC的技術(shù)創(chuàng)新步伐,也為其帶來了更多的商業(yè)機會。
隨著科技的不斷進(jìn)步,BJB公司意識到技術(shù)創(chuàng)新的重要性。因此,公司加大了研發(fā)投入,積極引進(jìn)先進(jìn)的技術(shù)和設(shè)備,致力于照明配件產(chǎn)品的創(chuàng)新和升級。經(jīng)過不懈的努力,BJB成功研發(fā)出具有高效節(jié)能、環(huán)保低碳特點的照明配件產(chǎn)品,不僅提升了產(chǎn)品的性能和質(zhì)量,也滿足了客戶對綠色照明的需求。
Greenconn Corp自創(chuàng)立之初便致力于連接器技術(shù)的研發(fā)與創(chuàng)新。在20世紀(jì)末,隨著電子產(chǎn)品的普及和通訊技術(shù)的飛速發(fā)展,連接器作為電子設(shè)備間的橋梁,其重要性日益凸顯。Greenconn Corp憑借其敏銳的市場洞察力和強大的研發(fā)實力,成功研發(fā)出了一系列高性能、高可靠性的連接器產(chǎn)品,迅速在汽車電子、通信設(shè)備等領(lǐng)域占據(jù)了一席之地。這些創(chuàng)新產(chǎn)品不僅滿足了市場對連接器高質(zhì)量、高效率的需求,還推動了整個電子行業(yè)的發(fā)展。
在電子行業(yè)中,技術(shù)創(chuàng)新是企業(yè)發(fā)展的核心驅(qū)動力。DAESAN公司深知這一點,因此一直致力于技術(shù)研發(fā)和創(chuàng)新。他們投入大量資金和資源,引進(jìn)先進(jìn)的生產(chǎn)設(shè)備和技術(shù)人才,不斷推出具有競爭力的新產(chǎn)品。其中,一款高性能的電子芯片引起了行業(yè)的廣泛關(guān)注。這款芯片采用了最新的納米技術(shù)和低功耗設(shè)計,不僅性能卓越,而且節(jié)能環(huán)保。DAESAN公司憑借這一技術(shù)創(chuàng)新,成功打開了高端電子市場的大門。
從2006.8.1開始正式接觸DSP到現(xiàn)在也已經(jīng)一個多月了,從開始的在自己的開發(fā)板上調(diào)試熟悉DSP到現(xiàn)在要自己設(shè)計DSP,真的是很不容易.我想把在設(shè)計中遇到的問題和常用的電路芯片選擇歸納如下: 1.電源部分 使用了AC-DC5V的變壓器,在引入板子的 ...… 查看全部問答∨ |
|
我想串口發(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里面的加法模塊做仿真時提示錯誤為Could not infer a type for port fir16/Parallel Adder Subtractor:data.這個是怎么回事?。空圶DJM指點,我設(shè)計的是FIR濾波器,不能識別端口數(shù)據(jù)是什么意思呢?是不是哪里設(shè)置錯誤了?… 查看全部問答∨ |
看了一下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)體定義的時候 ...… 查看全部問答∨ |
|
【轉(zhuǎn)自淘e淘版】贈送MSP430 USB仿真器 PCB空板 剛在咱們論壇淘e淘版上看到的,有兄弟贈送MSP430 USB仿真器 PCB空板,鏈接如下大家趕緊了!https://bbs.eeworld.com.cn/viewthread.php?tid=307509… 查看全部問答∨ |
如果程序中要用到的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ā)板 精華推薦
- 半導(dǎo)體關(guān)稅可能會使您的下一輛汽車更加昂貴
- 潮起!人形機器人成本的20%-30%——靈巧手,國產(chǎn)3大廠商正快速產(chǎn)業(yè)化!
- AB Dynamics發(fā)布用于無人駕駛測試的物體檢測系統(tǒng)
- AI重構(gòu)出行:高階輔助駕駛的破局之路
- 廣汽即將發(fā)布全新星源增程技術(shù)
- Yole表示,到2030年,數(shù)據(jù)中心芯片市場規(guī)模將達(dá)到5000億美元
- 綠色節(jié)能趨勢下的延時繼電器發(fā)展:低功耗設(shè)計與環(huán)保材料應(yīng)用
- 國內(nèi)車企在固態(tài)電池領(lǐng)域的挑戰(zhàn)和技術(shù)方案
- 資本熱捧 + 政策護航,2025 人形機器人能否叩開 “量產(chǎn)元年” 大門?
- 耐世特推出用于智能運動控制的 MotionIQ?軟件套件
- 看視頻贏50元京東卡|泰享實測之水哥秘籍第四期
- 看直播贏好禮:TI和世平集團與您分享毫米波雷達(dá)與3D ToF解決方案
- 【EEWORLD第三十七屆】2012年04月社區(qū)明星人物揭曉!
- 意法半導(dǎo)體工業(yè)峰會2023即將開啟!報名、參會均有禮!
- 有獎直播|TI毫米波雷達(dá)在汽車領(lǐng)域的最新應(yīng)用
- 直播【英飛凌應(yīng)用于變頻家電和中小功率工業(yè)變頻控制領(lǐng)域的產(chǎn)品:iMOTION™】
- 點評Vishay視頻 瘋狂搶樓贏禮進(jìn)行時!
- 是德科技有獎直播:元宇宙測試系列研討會之VR/AR 數(shù)字接口測試的挑戰(zhàn)
- 【貝能好禮相送】我們拼啦 尋覓Infineon 調(diào)光恒流LED驅(qū)動器 ICL5102寫真
- 三星市值今年蒸發(fā)394億美元 成全球最差科技股之一
- 工業(yè)富聯(lián)上半年凈利增長2.24%,電源IC廠商營收“冰火兩重天
- 聊天機器人Vector來了 可隨時與用戶進(jìn)行互動
- 揭秘:如何打造光伏并網(wǎng)逆變器的環(huán)境適應(yīng)性
- 關(guān)于無人機與機器人的電機驅(qū)動參考設(shè)計
- iPhone12S細(xì)節(jié)解密:配置、外形都大升級
- 索尼將要重啟Xperia Compact小屏智能手機系列
- STM32中斷,及FreeRTOS中斷優(yōu)先級配置
- 三星S21/Ultra不支持安卓系統(tǒng)A/B分區(qū)無縫更新
- CRC校驗、STM32中CRC計算單元、CRC應(yīng)用