久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

STM32單片機(jī)串口通訊代碼

作者:佚名   來(lái)源:不詳   點(diǎn)擊數(shù):  更新時(shí)間:2014年05月16日   【字體:

  在STM32開(kāi)發(fā)中,串口是我們最常用的接口。通過(guò)串口,我們很方便地把數(shù)據(jù)輸出到電腦,方便我們進(jìn)行程序調(diào)試。下面我們來(lái)看看STM32的串口通訊代碼。

 
要實(shí)現(xiàn)串口通訊,我們要進(jìn)行下面幾個(gè)步驟:
 
首先:要打開(kāi)GPIO口的時(shí)鐘和串口模塊時(shí)鐘。在圓點(diǎn)博士小四軸中,我們用的是GPIOA和COM1模塊。
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
 
 
 
其次:要指定GPIO口,即確定哪些IO是用于串口通訊的。記得使用GPIO_Mode_AF_PP模式
 
  GPIO_InitStructure.GPIO_Pin = BS004_COM1_TX;     //圓點(diǎn)博士:設(shè)置PA9管腳為串口TX
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //圓點(diǎn)博士:設(shè)置串口TX最大允許輸出速度
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //圓點(diǎn)博士:設(shè)置串口TX為輸出
  GPIO_Init(GPIOA, &GPIO_InitStructure);
 //
  GPIO_InitStructure.GPIO_Pin = BS004_COM1_RX;     //圓點(diǎn)博士:設(shè)置PA9管腳為串口RX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //圓點(diǎn)博士:設(shè)置串口RX為輸入
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
 
 
 
第三步:設(shè)置串口模塊參數(shù),如波特率,奇偶校驗(yàn)這些。
 
  USART_InitStructure.USART_BaudRate = 115200;         //圓點(diǎn)博士:設(shè)置串口波特率為115200
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;   //圓點(diǎn)博士:設(shè)置串口數(shù)據(jù)長(zhǎng)度為8位
  USART_InitStructure.USART_StopBits = USART_StopBits_1;        //圓點(diǎn)博士:設(shè)置串口停止位長(zhǎng)度為1位
  USART_InitStructure.USART_Parity = USART_Parity_No ;     //圓點(diǎn)博士:設(shè)置串口奇偶校驗(yàn)為無(wú)
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  //圓點(diǎn)博士:設(shè)置串口數(shù)據(jù)流控制為無(wú)
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;          //圓點(diǎn)博士:設(shè)置串口為發(fā)送和接收模式
  USART_Init(USART1, &USART_InitStructure);   //圓點(diǎn)博士:設(shè)置串口參數(shù)
 
 
第四步:如果使用串口中斷的話(huà),還要設(shè)置中斷優(yōu)先級(jí)。下面例子設(shè)置為最高優(yōu)先級(jí)0。
 
 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
 
 
 
最后一步,就是打開(kāi)中斷,并使能串口模塊拉。
 
  USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //圓點(diǎn)博士:允許接收中斷
  USART_Cmd(USART1, ENABLE); 
 
 
 
上面例子只啟動(dòng)了接收中斷。這樣,當(dāng)STM32串口接收到數(shù)據(jù)的時(shí)候,代碼就會(huì)自動(dòng)跳轉(zhuǎn)到中斷代碼里面執(zhí)行對(duì)應(yīng)的操作。
 
 
 
那么,對(duì)于發(fā)送,怎么辦呢? 我們采用查詢(xún)的方式來(lái)發(fā)送。
 
void BS004_COM1_Send_Char(unsigned char ascii_code)       //圓點(diǎn)博士:發(fā)送一個(gè)字符
{
  USART_SendData(USART1,ascii_code);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} //圓點(diǎn)博士:等待直到發(fā)送完成
}
 
 
 
如過(guò)要發(fā)送單字符,使用下面的方法:
 
 BS004_COM1_Send_Char('/');                //圓點(diǎn)博士:發(fā)送字符/
 BS004_COM1_Send_Char(13);                 //圓點(diǎn)博士:發(fā)送回車(chē)字符
 
 
 
如過(guò)要發(fā)送字符串,則使用下面的方法。
 
void BS004_COM1_Send_Str_Body(unsigned char* str_buf)  //圓點(diǎn)博士:發(fā)送一個(gè)指定長(zhǎng)度的字符串
{
 unsigned char i,str_len;
 str_len=0;
 for(i=0;i<64;i++)
 { 
  str_len++;
  if(str_buf[i]=='.') break;
 }
  for(i=0;i
}
 
在上面的例子中,使用了符號(hào).作為字符串結(jié)束標(biāo)志。
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 精品一区二区三区在线观看国产 | 亚洲视频免费 | 欧美网站一区二区 | 国产成人福利 | 国产高清在线 | 亚洲一区精品在线 | 日韩精品在线免费观看视频 | 99精品在线观看 | 1级毛片| 久久久久久亚洲欧洲 | 中文字幕久久久 | 国产色婷婷精品综合在线手机播放 | 久久久精品久久久 | 国产精品久久久久久久久久久久久 | 国产精品美女久久久免费 | 欧美一区日韩一区 | 精品国产一区二区三区久久久久久 | www免费视频 | 久久久99精品免费观看 | 亚洲网站在线观看 | 日韩黄色免费 | www免费视频 | .国产精品成人自产拍在线观看6 | 日韩精品一区二区三区免费视频 | 久草热在线 | 嫩呦国产一区二区三区av | 亚洲综合在线一区 | 福利国产 | 国产精品久久久久久久久图文区 | 国产成人免费在线观看 | 欧美 日韩 国产 在线 | 能看的av网站| 91精品国产91久久久久久丝袜 | 国产精品成人一区二区 | 日韩精品二区 | 国产在线精品一区二区 | 亚洲成人三区 | 久久精品国产免费 | 久久亚洲国产精品日日av夜夜 | 日韩视频1 | 91色在线视频 |