娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月29日(星期日)

2018年12月29日 | stm32學習筆記(三)串口通訊實驗

發布者:dandan666 來源: eefocus關鍵字:stm32  串口通訊實驗 手機看文章 掃描二維碼
隨時隨地手機看文章

#include "sys.h"

#include "usart.h"   

//////////////////////////////////////////////////////////////////////////////////  

//如果使用ucos,則包括下面的頭文件即可.

#if SYSTEM_SUPPORT_OS

#include "includes.h" //ucos 使用   

#endif

//////////////////////////////////////////////////////////////////////////////////  

//本程序只供學習使用,未經作者許可,不得用于其它任何用途

//ALIENTEK STM32開發板

//串口1初始化    

//正點原子@ALIENTEK

//技術論壇:www.openedv.com

//修改日期:2012/8/18

//版本:V1.5

//版權所有,盜版必究。

//Copyright(C) 廣州市星翼電子科技有限公司 2009-2019

//All rights reserved

//********************************************************************************

//V1.3修改說明 

//支持適應不同頻率下的串口波特率設置.

//加入了對printf的支持

//增加了串口接收命令功能.

//修正了printf第一個字符丟失的bug

//V1.4修改說明

//1,修改串口初始化IO的bug

//2,修改了USART_RX_STA,使得串口最大接收字節數為2的14次方

//3,增加了USART_REC_LEN,用于定義串口最大允許接收的字節數(不大于2的14次方)

//4,修改了EN_USART1_RX的使能方式

//V1.5修改說明

//1,增加了對UCOSII的支持

//////////////////////////////////////////////////////////////////////////////////   

 

 

//////////////////////////////////////////////////////////////////

//加入以下代碼,支持printf函數,而不需要選擇use MicroLIB   

#if 1

#pragma import(__use_no_semihosting)             

//標準庫需要的支持函數                 

struct __FILE 

int handle; 

 

}; 

 

FILE __stdout;       

//定義_sys_exit()以避免使用半主機模式    

_sys_exit(int x) 

x = x; 

//重定義fputc函數 

int fputc(int ch, FILE *f)

{      

while((USART1->SR&0X40)==0);//循環發送,直到發送完畢   

    USART1->DR = (u8) ch;      

return ch;

}

#endif 

 

 

 

#if EN_USART1_RX   //如果使能了接收

//串口1中斷服務程序

//注意,讀取USARTx->SR能避免莫名其妙的錯誤   

u8 USART_RX_BUF[USART_REC_LEN];     //接收緩沖,最大USART_REC_LEN個字節.

//接收狀態

//bit15, 接收完成標志

//bit14, 接收到0x0d

//bit13~0, 接收到的有效字節數目

u16 USART_RX_STA=0;       //接收狀態標記   

  

void uart_init(u32 bound){

  //GPIO端口設置

  GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA時鐘

  

//USART1_TX   GPIOA.9

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出

  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

   

  //USART1_RX   GPIOA.10初始化

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入

  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

 

  //Usart1 NVIC 配置

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優先級3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優先級3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根據指定的參數初始化VIC寄存器

  

   //USART 初始化設置

 

USART_InitStructure.USART_BaudRate = bound;//串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數據格式

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); //初始化串口1

  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟串口接受中斷

  USART_Cmd(USART1, ENABLE);                    //使能串口1 

 

}

 

void USART1_IRQHandler(void)                //串口1中斷服務程序

{

u8 Res;

#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.

OSIntEnter();    

#endif

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數據必須是0x0d 0x0a結尾)

{

Res =USART_ReceiveData(USART1); //讀取接收到的數據


if((USART_RX_STA&0x8000)==0)//接收未完成

{

if(USART_RX_STA&0x4000)//接收到了0x0d

{

if(Res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始

else USART_RX_STA|=0x8000; //接收完成了  把1000 0000 0000 0000

}

else //還沒收到0X0D

{

if(Res==0x0d)USART_RX_STA|=0x4000;//把15位值一 0100 0000 0000 0000 

else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數據錯誤,重新開始接收   

}  

}

}     

     } 

#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.

OSIntExit();   

#endif

#endif

 

 

/*void USART1_IRQHandler(void)                 //串口1中斷服務程序

 {

 u8 Res;

 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數據必須是0x0d 0x0a結尾)

  {

  Res =USART_ReceiveData(USART1);//(USART2->DR); //讀取接收到的數據

  if((USART_RX_STA&0x8000)==0)//接收未完成

  if(USART_RX_STA&0x4000)//接收到了0x0d

  {

  if(Res!=0x0a)

  {

  USART_RX_STA&=0x3FFF;        //如果沒接收到0x0a,清除接收到0d標志位。繼續接收數據

                          USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

                          USART_RX_STA++;

  }

  else USART_RX_STA|=0x8000; //接收完成了 

  }

  else //還沒收到0X0D

  { 

  if(Res==0x0d)

  {

  USART_RX_STA|=0x4000;

  USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

  USART_RX_STA++;

  }

  else

  {

  USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

  USART_RX_STA++;

  if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數據錯誤,重新開始接收   

  }   

  }

  }      

 }

*/



首先進行GPIOA設USART1使能,都在APB2總線上


TX設置成 復用推挽輸出GPIO_Mode_AF_PP,RX設置GPIO_Mode_IN_FLOATING浮空輸入


中斷優先級配置


串口結構體賦值




中斷服務函數 原子程序會出現,接收到0x0d如何后面不是0x0a的話,會把前面接收數據清除,這是一個BUG。




 


#include "led.h"

#include "delay.h"

#include "sys.h"

#include "usart.h"

//ALIENTEK Mini STM32開發板范例代碼3

//串口實驗   

//技術支持:www.openedv.com

//廣州市星翼電子科技有限公司

 int main(void)

 {

u8 t;

u8 len;

u16 times=0; 

 

delay_init();     //延時函數初始化

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設置中斷優先級分組2

uart_init(9600); //串口初始化為9600

LED_Init();   //初始化與LED連接的硬件接口 

 

while(1)

{

if(USART_RX_STA&0x8000)

{    

len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度

printf("\r\n您發送的消息為:\r\n");

for(t=0;t

{

USART1->DR=USART_RX_BUF[t];

while((USART1->SR&0X40)==0);//等待發送結束

}

printf("\r\n\r\n");//插入換行

USART_RX_STA=0;

}else

{

times++;

if(times%5000==0)

{

printf("\r\nALIENTEK MiniSTM32開發板 串口實驗\r\n");

printf("正點原子@ALIENTEK\r\n\r\n\r\n");

}

if(times%200==0)printf("請輸入數據,以回車鍵結束\r\n");  

if(times%30==0)LED0=!LED0;//閃爍LED,提示系統正在運行.

delay_ms(10);   

}

}  

}

//bit15, 接收完成標志

//bit14, 接收到0x0d

//bit13~0, 接收到的有效字節數目


u16 USART_RX_STA=0;       //接收狀態標記 


01xx xxxx xxxx xxxx  表示接收到0x0d


11xx xxxx xxxx  xxxx 表示接收數據結束


關鍵字:stm32  串口通訊實驗 引用地址:stm32學習筆記(三)串口通訊實驗

上一篇:stm32學習筆記(四)外部中斷
下一篇:stm32學習筆記(二)按鍵實驗

推薦閱讀

集微網消息,CEVA宣布,經Bluetooth?SIG認證的RivieraWaves低能耗藍牙(BLE) Mesh IP達成重要的里程碑,已經授權許可給第十家客戶,這些客戶均在利用Mesh規范來進行各種用例和應用設計。ABI Research高級分析師Andrew Zignani評論道:“Mesh具備獨特的特性,使得藍牙技術能夠成功地在智能手機、PC和平板電腦上發揮作用,成為智能家居和樓宇自動化市場...
近日,在東京國際展覽中心舉辦了世界最大規模的機器人展覽會“2019國際機器人展(iREX2019)”。 在Twitr上成為熱議話題的“自動蓋章機器人”引起了人們極大的關注,除此之外還有值得關注的多種多樣的機器人展示。 這次特別常見的是以與人協作為目的的協作機器人。就是在工廠與人并排作業的機器人。 據悉,協作機器人已經得到了應用,展會上也展示了...
近日,青島惠科6英寸晶圓半導體項目進入試生產階段。據青島日報報道,目前企業已經接到十幾萬件芯片意向訂單,當所有設備、電力配套調試完畢后,企業將開始大規模批量化生產。惠科6英寸晶圓半導體項目是集功率半導體器件設計、制造、封裝測試為一體的全產業鏈項目,由深圳惠科投資有限公司與青島即墨區馬山實業發展有限公司共同出資建設。投產后產品可應用...
本文可用來解決CC2530在ZSTACK下可以設置斷點,調試的時候卻無法到達這個斷點的問題。其它在IAR中可以單步調試卻無法進入斷點的單片機也可以參考。首先要確定勾選了C-SPY-specific extra output file如果在A行設置的斷點,單步調試的時候卻只能到達A后邊的某幾行,可能的一個原因就是代碼優化的等級太高了,導致編譯器實際上沒有在A行停頓。解決辦法:...

史海拾趣

問答坊 | AI 解惑

有沒這樣的光耦

有沒CE間的隔斷電壓在250V以上,控制導通電壓在7V以下的光耦,工作頻率>400Hz,…

查看全部問答∨

單總線單片機多機通訊系統設計

傳統的多機通訊系統一般需要四條線完成: 1.電源線;2.地線;3.發送信號線;4.接收信號線。然而,對于主機和分機距離較遠、分機臺數較多的系統,采用四線制的經費投入較大,安裝起來也頗困難。基于這一問題,本文結合為某醫院研制的既有模擬信號( ...…

查看全部問答∨

單片機讀寫SD卡實例

哪位大蝦有相關的程序或者例子參考下,小弟不勝感激! 謝謝…

查看全部問答∨

SM/C和SM/L 封裝上的區別

發現sm的庫里面有兩種SM/C和SM/L封裝,如果同是0805那這個C和L代表什么啊?…

查看全部問答∨

我自己畫的開發板

使用AD6.9畫的板子…

查看全部問答∨

ADS下的結構體對齊問題

問一個在ADS編譯器下關于結構體對齊的問題. 如下結構體: typedef struct {     U8        bLength;     U8        bDescriptorType;     #pragma pack(paush,1 &nbs ...…

查看全部問答∨

誰用過AT9261的CE5 BSP,1.7源碼版本的

ATMEL年初總算放出了一系列帶源碼的WINCE BSP了,但是我在使用AT9261的CE5帶源碼1.7版本的BSP時,在編譯的過程中總是報如下錯誤: BUILD: [01:0000000100:INFO  ] Directory: D:\\WINCE500\\PLATFORM\\AT91SAM9261EK\\SRC\\MISC\\GPIO ...…

查看全部問答∨

請教關于485通信的地線的問題

把板子上的地線和JLINK的地線連接起來時,485通信正常。 不接時,stm32只有接收沒有發送信號。 這是什么原因呢。用的是MAX3485。難道是485通信電路不對嗎。 附件中有電路圖,請指點。 最小系統.pdf (45.67 KB) 下載次 ...…

查看全部問答∨

關于WinCE6.0系統上新建窗口不執行OnCreate函數的問題

大家好,我們使用的開發板是CHSINT SDK For WinCE 6.0 (ARMV4I),系統是WinCE6.0,開發環境VS2005。我新建了一個基于對話框的MFC程序,需要在創建窗口的時候一些初始化,為xxxDlg類添加了WM_CREATE消息響應函數,并加了初始化代碼,但是調試的時候 ...…

查看全部問答∨

Raspberry Pi專用的Wolfson聲卡

本帖最后由 oliverzhang 于 2014-3-19 14:13 編輯        對于熱衷DIY的用戶而言,RaspberryPi開發板顯然已經成為最熱門的開發設備了,只要用戶想得到的工程,Raspberry Pi幾乎都能幫你實現。Raspberry Pi雖然具有音頻功能, ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 南川市| 惠水县| 孝感市| 府谷县| 贺州市| 塔城市| 新兴县| 安顺市| 江西省| 临沂市| 潢川县| 象州县| 宁武县| 招远市| 莒南县| 平谷区| 西藏| 顺昌县| 汤阴县| 洮南市| 博兴县| 方山县| 大埔县| 淄博市| 江西省| 宁波市| 淳化县| 芦溪县| 兴仁县| 南京市| 肇东市| 夏河县| 长海县| 盖州市| 鄂伦春自治旗| 远安县| 夏河县| 阳原县| 陈巴尔虎旗| 松滋市| 张家港市|