在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM學習《六》——從頭文件開始自己動手設置STM32串口通訊

            ARM學習《六》——從頭文件開始自己動手設置STM32串口通訊

            作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
            運用STM32的庫函數(shù)時,有時候為了看懂一句語句需要翻遍整個頭文件,找到頭文件中預定義的名字到底代表的是什么意思,具體寄存器設置的數(shù)值是多少,相當麻煩。我花了一天的時間才明白串口設置的具體過程,只是庫函數(shù)想的比較周全。下面是我調試好的串口設置程序,頭文件是我自己定義的,舍去了庫文件中繁瑣的結構體定義……

            首先定義頭文件:

            本文引用地址:http://www.biyoush.com/article/201611/318955.htm

            /

            RCC_CFGR &= (uint32_t)0xF8FF0000;

            RCC_CR &= (uint32_t)0xFEF6FFFF;//

            RCC_CR &= (uint32_t)0xFFFBFFFF;//

            RCC_CFGR &= (uint32_t)0xFF80FFFF;//

            RCC_CIR = 0x00000000;/

            RCC_CR |=0x00010000;//

            do

            {

            HSEStatus = RCC_CR & 0x00020000;

            StartUpCounter++;

            } while((HSEStatus == 0) && (StartUpCounter != 0x0500));

            if ((RCC_CR & 0x00020000) != 0)

            {

            HSEStatus =0x01;

            }

            else

            {

            HSEStatus =0x00;

            }

            if (HSEStatus ==0x01)

            {

            RCC_CFGR |=0x00000000;//

            RCC_CFGR |=0x00000000;//

            RCC_CFGR |=0x00000000;//

            RCC_CFGR &=(~(0x00010000 | 0x00020000 | 0x003C0000));

            RCC_CFGR |= 0x00010000 | 0x00020000 | 0x000C0000;//

            RCC_CR |= 0x01000000;//

            while((RCC_CR & 0x02000000) == 0)//

            {

            }

            RCC_CFGR &=~0x00000003;

            RCC_CFGR |=0x00000002; //

            while ((RCC_CFGR &0x0000000C) !=0x08) //

            {

            }

            }

            else

            {while (1)

            {

            }

            }

            }

            設置好時鐘就可以串口初始化了:

            void stm32_UsartSetup ()//串口初始化

            {

            RCC_APB2ENR|=0x00004000;// enable clock for USART1

            RCC_APB2ENR|=0x00000001;//復用功能IO時鐘使能

            RCC_APB2ENR|=0x00000004;//端口A時鐘使能

            GPIO_PORTA_CRH&=~(0x00000FF0);// Clear PA9, PA10

            GPIO_PORTA_CRH|=0x000000B0;// USART1 Tx (PA9)alternate output push-pull

            GPIO_PORTA_CRH|=0x00000400;// USART1 Rx (PA10) input floating

            USART1_BRR=0x00000823;////波特率9600/20M

            USART1_CR1&=0xFFFFEFFF;// set Data bits

            USART1_CR2&=0xFFFFCFFF;// set Stop bits

            USART1_CR1&=0xFFFFFBFF;//// set Parity

            USART1_CR1|=(0x00000004|0x00000008);// RX, TX enable

            USART1_CR1|=0x00002000;// USART enable

            }

            到此串口設置設置完畢,下面我要和PC機通訊了,我要從上位機通過串口助手發(fā)送一字節(jié)的十六進制數(shù),然后下位機(STM32)返回給PC機所發(fā)的一字節(jié)數(shù)據(jù):

            int main()

            {

            SystemInit0();

            stm32_UsartSetup ();

            while(1)

            {

            while(USART1->SR&0x00000020)//等待RXNE置位

            {

            flag=USART1_DR&0xff;

            USART1_DR=flag&0xff;

            while((USART1->SR)&0x80==0);//等待發(fā)送完畢

            while((USART1->SR)&0x40==0);

            flag=USART1->SR;

            }

            }

            }




            評論


            技術專區(qū)

            關閉