serial.c
#include "serial.h"
int fputc(int ch,FILE *p) //在使用printf時系統(tǒng)自動條用此函數(shù)
{
USART_SendData(USART2,(u8)ch);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
return ch;
}
/*******************************************************************************
* 函 數(shù) 名 : serial_init
* 函數(shù)功能 : IO端口及串口1,時鐘初始化函數(shù) A9,A10
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void serial1_init(u32 bt)
{
GPIO_InitTypeDef GPIO_InitStructure; //聲明一個結(jié)構(gòu)體變量,用來初始化GPIO
NVIC_InitTypeDef NVIC_InitStructure; //中斷結(jié)構(gòu)體定義
USART_InitTypeDef USART_InitStructure; //串口結(jié)構(gòu)體定義
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate=bt; //波特率設(shè)置為bt
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(USART1,&USART_InitStructure);
USART_Cmd(USART1, ENABLE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能或者失能指定的USART中斷 接收中斷
USART_ClearFlag(USART1,USART_FLAG_TC);//清除USARTx的待處理標(biāo)志位
}
/*******************************************************************************
* 函 數(shù) 名 : serial2_init
* 函數(shù)功能 : IO端口及串口2,時鐘初始化函數(shù) A2,A3
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void serial2_init(u32 bt)
{
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure; //聲明一個結(jié)構(gòu)體變量,用來初始化GPIO
//使能串口的RCC時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能UART3所在GPIOB的時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
//串口使用的GPIO口配置
// Configure USART2 Rx (PB.11) as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure USART2 Tx (PB.10) as alternate function push-pull
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置串口
USART_InitStructure.USART_BaudRate = bt;
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;
// Configure USART3
USART_Init(USART2, &USART_InitStructure);//配置串口3
// Enable USART1 Receive interrupts 使能串口接收中斷
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
//串口發(fā)送中斷在發(fā)送數(shù)據(jù)時開啟
//USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
// Enable the USART3
USART_Cmd(USART2, ENABLE);//使能串口3
//串口中斷配置
//Configure the NVIC Preemption Priority Bits
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
// Enable the USART3 Interrupt
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*******************************************************************************
* 函 數(shù) 名 : serial3_init
* 函數(shù)功能 : IO端口及串口3,時鐘初始化函數(shù) B10,B11
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void serial3_init(u32 bt)
{
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure; //聲明一個結(jié)構(gòu)體變量,用來初始化GPIO
//使能串口的RCC時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能UART3所在GPIOB的時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
//串口使用的GPIO口配置
// Configure USART2 Rx (PB.11) as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Configure USART2 Tx (PB.10) as alternate function push-pull
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//配置串口
USART_InitStructure.USART_BaudRate = bt;
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;
// Configure USART3
USART_Init(USART3, &USART_InitStructure);//配置串口3
// Enable USART1 Receive interrupts 使能串口接收中斷
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
//串口發(fā)送中斷在發(fā)送數(shù)據(jù)時開啟
//USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
// Enable the USART3
USART_Cmd(USART3, ENABLE);//使能串口3
//串口中斷配置
//Configure the NVIC Preemption Priority Bits
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
// Enable the USART3 Interrupt
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*******************************************************************************
* 函 數(shù) 名 : serial1_sned_char
* 函數(shù)功能 : 串口1發(fā)送一字節(jié)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void serial1_sned_char(u8 temp)
{
USART_SendData(USART1,(u8)temp);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
/*******************************************************************************
* 函 數(shù) 名 : serial1_sned_buff
* 函數(shù)功能 : 串口1發(fā)送一字符串
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void serial1_sned_buff(u8 buf[],u32 len)
{
u32 i;
for(i=0;i serial1_sned_char(buf[i]); } /******************************************************************************* * 函 數(shù) 名 : serial2_sned_char * 函數(shù)功能 : 串口2發(fā)送一字節(jié) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial2_sned_char(u8 temp) { USART_SendData(USART2,(u8)temp); while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET); } /******************************************************************************* * 函 數(shù) 名 : serial2_sned_buff * 函數(shù)功能 : 串口2發(fā)送一字符串 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial2_sned_buff(u8 buf[],u32 len) { u32 i; for(i=0;i serial2_sned_char(buf[i]); } //-------------------------------------------------------------------------------------------------------- /******************************************************************************* * 函 數(shù) 名 : serial3_sned_char * 函數(shù)功能 : 串口3發(fā)送一字節(jié) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial3_sned_char(u8 temp) { USART_SendData(USART3,(u8)temp); while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET); } /******************************************************************************* * 函 數(shù) 名 : serial3_sned_buff * 函數(shù)功能 : 串口3發(fā)送一字符串 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial3_sned_buff(u8 buf[],u32 len) { u32 i; for(i=0;i serial3_sned_char(buf[i]); } serial.h **************************************************/ #ifndef _serial_ #define _serial_ #include "stm32f10x.h" #include "stdio.h" //------------------------------------------------------------------------------------------ /******************************************************************************* * 函 數(shù) 名 : fputc * 函數(shù)功能 : printf會調(diào)用 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ int fputc(int ch,FILE *p); /******************************************************************************* * 函 數(shù) 名 : serial1_init * 函數(shù)功能 : IO端口及串口1,時鐘初始化函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial1_init(u32 bt); /******************************************************************************* * 函 數(shù) 名 : serial1_sned_char * 函數(shù)功能 : 串口1發(fā)送一字節(jié) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial1_sned_char(u8 temp); /******************************************************************************* * 函 數(shù) 名 : serial1_sned_buff * 函數(shù)功能 : 串口1發(fā)送一字符串 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial1_sned_buff(u8 buf[],u32 len); //----------------------------------------------------------------------------------------------------- /******************************************************************************* * 函 數(shù) 名 : serial2_init * 函數(shù)功能 : IO端口及串口2,時鐘初始化函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial2_init(u32 bt); /******************************************************************************* * 函 數(shù) 名 : serial2_sned_char * 函數(shù)功能 : 串口2發(fā)送一字節(jié) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial2_sned_char(u8 temp); /******************************************************************************* * 函 數(shù) 名 : serial2_sned_buff * 函數(shù)功能 : 串口2發(fā)送一字符串 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial2_sned_buff(u8 buf[],u32 len); //-------------------------------------------------------------------------------------------------------- /******************************************************************************* * 函 數(shù) 名 : serial3_init * 函數(shù)功能 : IO端口及串口3,時鐘初始化函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial3_init(u32 bt); /******************************************************************************* * 函 數(shù) 名 : serial3_sned_char * 函數(shù)功能 : 串口3發(fā)送一字節(jié) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial3_sned_char(u8 temp); /******************************************************************************* * 函 數(shù) 名 : serial3_sned_buff * 函數(shù)功能 : 串口3發(fā)送一字符串 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void serial3_sned_buff(u8 buf[],u32 len); 串口中斷函數(shù)處理部分 void USART1_IRQHandler(void) { USART_ClearFlag(USART1,USART_FLAG_TC); if(USART_GetITStatus(USART1,USART_IT_RXNE)!=Bit_RESET)//檢查指定的USART中斷發(fā)生與否 { u8 k=USART_ReceiveData(USART1); serial1_sned_char(k+1); } } void USART2_IRQHandler(void) { USART_ClearFlag(USART2,USART_FLAG_TC); if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET)//檢查指定的USART中斷發(fā)生與否 { u8 k=USART_ReceiveData(USART2); serial1_sned_char(k+1); } } void USART3_IRQHandler(void) { USART_ClearFlag(USART3,USART_FLAG_TC); if(USART_GetITStatus(USART3,USART_IT_RXNE)!=Bit_RESET)//檢查指定的USART中斷發(fā)生與否 { u8 k=USART_ReceiveData(USART3); serial1_sned_char(k+1); } }
上一篇:STM32啟動后系統(tǒng)初始化SystemInit()
下一篇:STM32 TIMER初始化步驟
推薦閱讀
史海拾趣
Crowd Supply Inc.深知社區(qū)是其發(fā)展的核心動力。因此,公司不僅在產(chǎn)品開發(fā)上積極吸納社區(qū)意見,還在市場推廣、技術(shù)支持等方面與社區(qū)緊密合作。通過舉辦線上線下的技術(shù)交流活動、設(shè)立社區(qū)獎勵機制等方式,公司成功吸引并留住了一批忠實的社區(qū)成員。這些成員不僅為公司帶來了穩(wěn)定的用戶基礎(chǔ),還通過口碑傳播擴大了公司的品牌影響力。
3L Electronic Corporation深知人才是企業(yè)發(fā)展的根本。因此,公司注重人才培養(yǎng)和團隊建設(shè),為員工提供豐富的培訓(xùn)和發(fā)展機會。通過引進優(yōu)秀人才和建立激勵機制,公司形成了一支高效、專業(yè)的團隊,為公司的持續(xù)創(chuàng)新和發(fā)展提供了有力保障。
3L Electronic Corporation,自XXXX年在臺北創(chuàng)立以來,憑借創(chuàng)始人的遠見卓識和團隊的努力,逐漸在電子行業(yè)嶄露頭角。初期,公司主要生產(chǎn)電子零組件,憑借著精湛的工藝和穩(wěn)定的質(zhì)量,贏得了客戶的信賴。隨著市場的擴大,公司逐漸拓展到電子產(chǎn)品修理和國際貿(mào)易等領(lǐng)域,為后續(xù)的快速發(fā)展奠定了堅實基礎(chǔ)。
Advanced Power Solutions公司非常重視人才培養(yǎng)和企業(yè)文化建設(shè)。公司注重員工的職業(yè)發(fā)展和培訓(xùn),為員工提供了廣闊的職業(yè)發(fā)展空間和學(xué)習(xí)機會。同時,公司還倡導(dǎo)開放、創(chuàng)新的企業(yè)文化,鼓勵員工提出新的想法和建議。這種積極向上的企業(yè)文化吸引了大量優(yōu)秀人才的加入,也為公司的持續(xù)發(fā)展提供了強大的動力。
以上五個故事框架僅用于說明Advanced Power Solutions公司可能的發(fā)展路徑和成就,并不代表公司的實際歷史。在實際撰寫時,需要根據(jù)公司的具體情況進行調(diào)整和補充。
FMI深知質(zhì)量是企業(yè)生存和發(fā)展的根本。因此,公司一直將質(zhì)量管理放在首位,建立了完善的質(zhì)量管理體系。從原材料采購到生產(chǎn)加工、成品檢驗等各個環(huán)節(jié)都嚴(yán)格把關(guān),確保產(chǎn)品質(zhì)量符合客戶要求。同時,F(xiàn)MI還注重客戶服務(wù)體驗的提升,為客戶提供及時、專業(yè)的技術(shù)支持和解決方案。這些努力使得FMI在客戶心中樹立了良好的口碑和形象。
為了加速技術(shù)的商業(yè)化進程,F(xiàn)ractus積極尋求與全球領(lǐng)先企業(yè)的合作。自2000年以來,公司陸續(xù)與多家知名手機廠商、電信運營商以及設(shè)備制造商建立了戰(zhàn)略合作關(guān)系。這些合作不僅為Fractus帶來了穩(wěn)定的收入來源,也促進了其技術(shù)的廣泛應(yīng)用和持續(xù)改進。同時,F(xiàn)ractus還通過簽訂全球許可協(xié)議和建立戰(zhàn)略伙伴關(guān)系,進一步拓展了其業(yè)務(wù)范圍和市場影響力。
摘要:介紹用MCS-51系列單片機控制手機收發(fā)短信息的原理、硬件電路、PDU數(shù)據(jù)格式和符合GSM07.05協(xié)議要求的短信息發(fā)送/接收程序,同時給出了一個應(yīng)用實例。 關(guān)鍵詞:單片機 短信息 PDU GSM 接口 GSM(Global System for Mobile comm ...… 查看全部問答∨ |
那位高手能幫忙解決一下s3c2410的spi口讀寫無線模塊cc2420的問題?? 我的問題主要是spi口到底是用查詢方式還是中斷方式。由于水平有限本人用了查詢方式。 下面是主要的程序: /************************************************* SPI low lever fuctions **********************************************/ void ...… 查看全部問答∨ |
我用的是三星的2440,在用spi對外設(shè)進行配置時,用示波器觀察輸出波形,發(fā)現(xiàn)nSS信號始終是高電平,數(shù)據(jù)信號和始終信號的波形都是對的。 問下大家,這個nSS我們怎么控制?還是說2440配置位master后,nSS是cpu自動控制的? PS:我現(xiàn)在的做法是將nSS ...… 查看全部問答∨ |
各位英雄: 我的目標(biāo)板已經(jīng)固化了內(nèi)核,但調(diào)試發(fā)現(xiàn)其中有一個驅(qū)動有問題,需要修改,但不想修改后重新編譯內(nèi)核并下載固化;能不能在PB中編譯驅(qū)動后,把新的驅(qū)動dll文件直接替換目標(biāo)機中的同名dll?如果可以,同名dll在何 ...… 查看全部問答∨ |
假設(shè)我現(xiàn)在有一個基于Arm核的單片機,并且有了一個基于這款單片機的開發(fā)平臺。現(xiàn)在想增加一塊多媒體芯片(比如中芯微968或者簡單些的芯片)來擴展一些功能,接線配置方面的事情我已經(jīng)做好了,假設(shè)我用CS3作為片選。我不解的是:我用什么方法來讀寫多 ...… 查看全部問答∨ |
先把老師的程序?qū)懙竭@里,慢慢研讀,#include <string.h>#include \"..\\inc\\44b.h\"#include \"..\\inc\\44blib.h\"#include \"..\\inc\\iic.h\"volatile int f_nGetACK;//獲取中斷響應(yīng)標(biāo)志//初始化IIC接口void Iic_init(void){ rIICCON=(1 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 座椅、天窗、電動尾門應(yīng)用 國產(chǎn)車規(guī)級高壓霍爾效應(yīng)傳感器推薦
- 突發(fā)!又一車企車機“崩了”
- 寧德時代為陳立泉院士頒發(fā)“卓越貢獻獎”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會重點
- 2025年1-4月ADAS供應(yīng)商裝機量排行榜:頭部集中與國產(chǎn)突圍并存
- 國內(nèi)飛行汽車無線通信測試成功,通信安全新突破
- SPAD席卷車載激光雷達市場
- 大聯(lián)大品佳集團推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬級像素大燈方案
- 哈曼推出采用三星Neo QLED技術(shù)的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術(shù) 提升車輛安全性和用戶體驗
- 答題抽獎:Mentor Tessent Automotive相關(guān)測試解決方案(獎品池還剩不少獎品喲)
- Mouser&TE直播:解鎖智能家居部件新技術(shù),探索連接黑科技
- 全球首款Cortex-M23內(nèi)核物聯(lián)網(wǎng)芯片SAML10和SAM L11系列 闖關(guān)獲取SAML10/SAML11法寶,拆除電子界安全危機,贏好禮!
- 有獎電源設(shè)計問卷調(diào)查
- 直播已結(jié)束【用于光伏逆變器/儲能系統(tǒng)的歐姆龍繼電器 /開關(guān)/連接器解決方案】
- 【搶樓贏禮】聊聊我用過的MOSFET!
- 【已結(jié)束】有獎直播【TI 全新CC2340無線 MCU,助力低功耗藍牙應(yīng)用】
- 羅姆有獎直播 | 高輸出功率激光二極管—助力激光雷達性能提升
- 有獎評測:50套來自恩智浦全新快速物聯(lián)網(wǎng)原型設(shè)計套件(價值350元)
- 您的電路保護有足夠的空間嗎?Littelfuse的881系列保險絲迎接這一挑戰(zhàn)