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

歷史上的今天

今天是:2025年01月31日(星期五)

2019年01月31日 | 【stm32f103】USART TX發(fā)送實(shí)現(xiàn)(寄存器版)

發(fā)布者:RadiantSerenity 來(lái)源: eefocus關(guān)鍵字:stm32f103  USART  TX發(fā)送 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

本講主要實(shí)現(xiàn)usart TX的實(shí)現(xiàn),主要分幾部分的應(yīng)用


1.USART 1 Tx polling的實(shí)現(xiàn)(附帶printf的實(shí)現(xiàn))


2.USART1 Tx DMA的實(shí)現(xiàn)


3.USART1 TX DMA中斷的實(shí)現(xiàn)


話不多說(shuō),開始


一.硬件原理圖

USART1在APB2總線

二.寄存器


寄存器可以參考  參考手冊(cè),在這里不做詳細(xì)討論


三.具體實(shí)現(xiàn)

1.      USART 1 Tx polling的實(shí)現(xiàn)(附帶printf的實(shí)現(xiàn))

1)  編程步驟:


->使能PA9的時(shí)鐘


->使能USART1的時(shí)鐘


->配置PA9為推挽復(fù)用輸出


->配置USART1的波特率為115200(因?yàn)閁SART1在APB2上,計(jì)算方法為APB2 clock/波特率)


->使能USART1和TX和USART1


->Polling方式往USART1的DR寄存器填數(shù)據(jù)


->printf需要重定向fputc


2)  程序調(diào)試


->程序調(diào)用


USART1_Init();

USART1_TX_Polling(100);

->使能PA9,USART1的時(shí)鐘


/* 1.ENABLE USART1 GPIOA CLOCK */

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

/* 2. ENABLE USART1 IN APB2 BUS CLOCK */

RCC->APB2ENR |=RCC_APB2ENR_USART1EN;


->配置PA9為推挽復(fù)用輸出


/* 3.CONFIG GPIOA PA9 AF MODE */

GPIOA->CRH &= ~(GPIO_CRH_MODE9 |GPIO_CRH_CNF9);

GPIOA->CRH |=GPIO_CRH_MODE9 | GPIO_CRH_CNF9_1;

此處需要注意一個(gè)特別重要的細(xì)節(jié):因?yàn)镃RH默認(rèn)的value是:

所以如果沒(méi)有清除到bit4-bit7,直接進(jìn)行或運(yùn)算就會(huì)造成錯(cuò)誤,成為開漏模式,CRL寄存器同樣道理,正常運(yùn)行如圖:


->配置波特率為115200



USART1->BRR |= 0x271;

運(yùn)行效果圖


->使能USART1和USART1 TX



USART1->CR1 |= USART_CR1_UE | USART_CR1_TE |USART_CR1_RE;

-> Polling方式往USART1的DR寄存器填數(shù)據(jù)


voidUSART1_TX_Polling(int loop_cnt)

{

    int index = 0;

    for(;index < loop_cnt;index++)

    {

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

        USART1->DR= 'a';            

    }

    while(1);

}


運(yùn)行圖

->printf fputc重定向


int fputc(int ch, FILE *fp)

{

    if (fp == stdout)

    {

        if (ch == '\n')

        {

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

            USART1->DR ='\r';

        }

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

        USART1->DR = ch;

    }

    return ch;

}


2.      USART1 Tx DMA的實(shí)現(xiàn)

1)  編程步驟


->使能PA9的時(shí)鐘


->使能USART1的時(shí)鐘


->配置PA9為推挽復(fù)用輸出


->配置USART1的波特率為115200(因?yàn)閁SART1在APB2上,計(jì)算方法為APB2 clock/波特率)


->使能USART1和TX和USART1


->設(shè)置DMA,請(qǐng)參照DMA文章:


http://blog.csdn.net/xiaoxiaopengbo/article/details/77434744


程序源碼


unsigned char buffer[52] = "DMA DATA TEST";

void USART1_TX_DMA()

{

    RCC->AHBENR |= RCC_AHBENR_DMA1EN;

    USART1->CR3 |= USART_CR3_DMAT;

    

    /* 6. CONFIG DMA */

    DMA1_Channel4->CMAR = (uint32_t)buffer;

    DMA1_Channel4->CPAR =(uint32_t)&USART1->DR;

    DMA1_Channel4->CNDTR = strlen(buffer);

    DMA1_Channel4->CCR |= DMA_CCR4_PL |DMA_CCR4_DIR | DMA_CCR4_MINC | DMA_CCR4_EN;

    

    while ((DMA1->ISR & DMA_ISR_TCIF4) ==0);

    DMA1->IFCR = DMA_IFCR_CTCIF4;

    DMA1_Channel4->CCR &= ~DMA_CCR4_EN;

    

    while(1);

}


程序調(diào)試圖:


3.      USART1 TX DMA中斷的實(shí)現(xiàn)

1)  編程步驟


->設(shè)置USART1


->設(shè)置DMA以及NVIC中斷


->編寫DMA中斷函數(shù)


2)  程序源碼


void USART1_TX_DMA_IRPT()

{

    NVIC_SetPriorityGrouping(4);

    

    NVIC_SetPriority(DMA1_Channel4_IRQn, 1);

    

    

    RCC->AHBENR |= RCC_AHBENR_DMA1EN;

    USART1->CR3 |= USART_CR3_DMAT;

    

    /* 6. CONFIG DMA */

    DMA1_Channel4->CMAR = (uint32_t)buffer;

    DMA1_Channel4->CPAR =(uint32_t)&USART1->DR;

    DMA1_Channel4->CNDTR = strlen(buffer);

    DMA1_Channel4->CCR |= DMA_CCR4_PL |DMA_CCR4_TCIE | DMA_CCR5_HTIE | DMA_CCR4_DIR | DMA_CCR4_MINC | DMA_CCR4_EN;

    NVIC_EnableIRQ(DMA1_Channel4_IRQn);

    

    while ((DMA1->ISR & DMA_ISR_TCIF4) ==0);

    DMA1->IFCR = DMA_IFCR_CTCIF4;

    DMA1_Channel4->CCR &= ~DMA_CCR4_EN;

    

    

    while(1);

}


3)  程序調(diào)試

四. 整個(gè)程序源碼

#include

#include

 

unsigned char buffer[52] = "DMA DATA TEST";

void USART1_Init()

{

    /* 1. ENABLE USART1 GPIOA CLOCK */

    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

    /* 2. ENABLE USART1 IN APB2 BUS CLOCK */

    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

    /* 3. CONFIG GPIOA PA9 AF MODE */

    GPIOA->CRH &= ~(GPIO_CRH_MODE9 |GPIO_CRH_CNF9);

    GPIOA->CRH |= GPIO_CRH_MODE9 |GPIO_CRH_CNF9_1;

    

    GPIOA->CRH &= ~(GPIO_CRH_MODE10 |GPIO_CRH_CNF10);

    GPIOA->CRH |= GPIO_CRH_CNF10_1;

    /* 4. CONFIG USART1 BAUD RATE 115200 */

    USART1->BRR |= 0x271;

    /* 5. ENBALE TRANSPORT AND ENABLE USART1 */

    USART1->CR1 |= USART_CR1_UE |USART_CR1_TE | USART_CR1_RE;

    

}

 

void USART1_TX_Polling(int loop_cnt)

{

    int index = 0;

    for(;index < loop_cnt;index++)

    {

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

             USART1->DR = 'a';            

    }

    while(1);

}

 

void USART1_TX_DMA()

{

    RCC->AHBENR |= RCC_AHBENR_DMA1EN;

    USART1->CR3 |= USART_CR3_DMAT;

    

    /* 6. CONFIG DMA */

    DMA1_Channel4->CMAR = (uint32_t)buffer;

    DMA1_Channel4->CPAR =(uint32_t)&USART1->DR;

    DMA1_Channel4->CNDTR = strlen(buffer);

    DMA1_Channel4->CCR |= DMA_CCR4_PL |DMA_CCR4_DIR | DMA_CCR4_MINC | DMA_CCR4_EN;

    

    while ((DMA1->ISR & DMA_ISR_TCIF4) ==0);

    DMA1->IFCR = DMA_IFCR_CTCIF4;

    DMA1_Channel4->CCR &= ~DMA_CCR4_EN;

    

    while(1);

}

 

void DMA1_Channel4_IRQHandler(void)

{

    

    if (DMA1->ISR & DMA_ISR_HTIF4)

    {

             DMA1->IFCR = DMA_IFCR_CHTIF4;

             //printf("HTIF: %d\n",DMA1_Channel4->CNDTR);

    }

    

    if (DMA1->ISR & DMA_ISR_TCIF4)

    {

             DMA1->IFCR = DMA_IFCR_CTCIF4;

             //printf("TCIF: %d\n",DMA1_Channel4->CNDTR);

    }

}

 

void USART1_TX_DMA_IRPT()

{

    NVIC_SetPriorityGrouping(4);

    

    NVIC_SetPriority(DMA1_Channel4_IRQn, 1);

    

    

    RCC->AHBENR |= RCC_AHBENR_DMA1EN;

    USART1->CR3 |= USART_CR3_DMAT;

    

    /* 6. CONFIG DMA */

    DMA1_Channel4->CMAR = (uint32_t)buffer;

    DMA1_Channel4->CPAR =(uint32_t)&USART1->DR;

    DMA1_Channel4->CNDTR = strlen(buffer);

    DMA1_Channel4->CCR |= DMA_CCR4_PL |DMA_CCR4_TCIE | DMA_CCR5_HTIE | DMA_CCR4_DIR | DMA_CCR4_MINC | DMA_CCR4_EN;

    NVIC_EnableIRQ(DMA1_Channel4_IRQn);

    

    while ((DMA1->ISR & DMA_ISR_TCIF4) ==0);

    DMA1->IFCR = DMA_IFCR_CTCIF4;

    DMA1_Channel4->CCR &= ~DMA_CCR4_EN;

    

    

    while(1);

}

 

int fputc(int ch, FILE *fp)

{

    if (fp == stdout)

    {

             if (ch == '\n')

             {

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

                       USART1->DR = '\r';

             }

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

             USART1->DR = ch;

    }

    return ch;

}

 

 

int main()

{

    USART1_Init();

    

    // USART1_TX_Polling(100);

    // USART1_TX_DMA();

    //USART1_TX_DMA_IRPT();    

    while(1);

    

}


關(guān)鍵字:stm32f103  USART  TX發(fā)送 引用地址:【stm32f103】USART TX發(fā)送實(shí)現(xiàn)(寄存器版)

上一篇:【stm32f103】stm32 外部中斷(寄存器版)
下一篇:【stm32f103】SysTick實(shí)現(xiàn)延時(shí)(寄存器版)

推薦閱讀

  蘋果、博通、思科、惠普、Facebook、谷歌、英特爾、聯(lián)發(fā)科、微軟和高通等公司的代表上周四與FCC的工作人員會(huì)面,探討就快速開放共享未授權(quán)服務(wù)的6GHz頻段。下面就隨嵌入式小編一起來(lái)了解一下相關(guān)內(nèi)容吧。?蘋果、谷歌等多家公司呼吁開放共享未授權(quán)服務(wù)的6GHz頻段  以上公司認(rèn)為對(duì)新的無(wú)執(zhí)照頻譜的需求是迫切的,他們希望在FCC發(fā)布“制定規(guī)則制定通知...
5G時(shí)代才剛剛到來(lái),就有廠商已經(jīng)開始躍躍欲試,準(zhǔn)備6G時(shí)代的研發(fā)工作了。據(jù)悉,LG今天宣布,將在深入推進(jìn)5G的同時(shí),進(jìn)行6G的研發(fā)計(jì)劃并在韓國(guó)科學(xué)技術(shù)院研究所建立6G研究中心。LG 6G研究中心掛牌成立(圖片來(lái)自tech.ifeng.com)  可以看出,LG此舉已在先下手為強(qiáng),爭(zhēng)取在6G時(shí)代斬獲先機(jī),提前進(jìn)入6G市場(chǎng),并作為“先行者”制定6G時(shí)代的網(wǎng)絡(luò)通...
為因應(yīng)武漢肺炎疫情,Google 宣布,在臺(tái)灣的所有辦公室將于 1 月 31 日關(guān)閉。 據(jù)悉,Google 臺(tái)灣員工將按原訂計(jì)畫于 31 日當(dāng)日復(fù)工,Google 建議臺(tái)灣辦公室關(guān)閉期間,員工都在家遠(yuǎn)距辦公,臺(tái)灣辦公室預(yù)計(jì)將于 2 月 3 日恢復(fù)營(yíng)運(yùn)。 此外,Google 旗下的非營(yíng)利組織 Google.Org,已向中國(guó)紅十字會(huì)捐贈(zèng) 25 萬(wàn)美元,并發(fā)起公司內(nèi)部募款活動(dòng),...
學(xué)習(xí)STM32開發(fā),肯定少不了DEBUG調(diào)試這一步驟。那么,本文帶你了解一下這個(gè)調(diào)試相關(guān)的知識(shí)。本文以STM32F1、Cortex-M3為例,其它系列芯片或內(nèi)核,原理相同或類似。1概況在STM32中,有很多調(diào)試組件。使用它們可以執(zhí)行各種調(diào)試功能,包括斷點(diǎn)、數(shù)據(jù)觀察點(diǎn)、 閃存地址重載以及各種跟蹤。STM32F1使用Cortex?-M3內(nèi)核,該內(nèi)核內(nèi)含硬件調(diào)試模塊,支持復(fù)雜的調(diào)試...

史海拾趣

問(wèn)答坊 | AI 解惑

韓國(guó)現(xiàn)代汽車智能安全氣囊采用FRAM作為數(shù)據(jù)存儲(chǔ)

世界頂尖的非易失性鐵電存儲(chǔ)器 (FRAM) 和集成半導(dǎo)體產(chǎn)品供應(yīng)商及開發(fā)商Ramtron International 宣布,韓國(guó)現(xiàn)代 Hyundai Autonet 公司選用了其生產(chǎn)的 FRAM 產(chǎn)品用于該公司的汽車智能安全氣囊和乘客傳感器中。非易失性存儲(chǔ)器(FRAM) 具備無(wú)倫比的讀寫壽 ...…

查看全部問(wèn)答∨

DDS

DDS有如下優(yōu)點(diǎn):⑴ 頻率分辨率高,輸出頻點(diǎn)多,可達(dá) 個(gè)頻點(diǎn)(N為相位累加器位數(shù));⑵頻率切換速度快,可達(dá)us量級(jí);⑶ 頻率切換時(shí)相位連續(xù);⑷ 可以輸出寬帶正交信號(hào);⑸ 輸出相位噪聲低,對(duì)參考頻率源的相位噪聲有改善作用;⑹可以產(chǎn)生任意波形;⑺ ...…

查看全部問(wèn)答∨

非常不錯(cuò)

有的劃給我也一份謝謝了!!tuoming624@yahoo.com.cn…

查看全部問(wèn)答∨

請(qǐng)教常用的軟件

用得到的常用的軟件包括那些,請(qǐng)賜教,小弟不勝感激:$…

查看全部問(wèn)答∨

LED電子燈箱控制電路

求助:我對(duì)LED很喜歡,單是我不懂電路控制技術(shù) 我想請(qǐng)大家?guī)臀以O(shè)計(jì)一個(gè)LED電子燈箱控制電路, 要求是: 2路輸出控制:1路主閃,1路直亮 2路輸出控制:2路疊加閃亮 5路輸出控制:1路主閃1路直亮+3路跑邊 7路輸出控制:4路疊加閃亮+3路跑邊 11 ...…

查看全部問(wèn)答∨

JPEG2000中嵌入式塊編碼的FPGA設(shè)計(jì)

摘要: 為了使JPEG2000能應(yīng)用到便攜產(chǎn)品中,采用了高效存儲(chǔ)結(jié)構(gòu)的硬件實(shí)現(xiàn)方案,并設(shè)計(jì)了相應(yīng)的寄存器組和控制邏輯。仿真結(jié)果表明所設(shè)計(jì)所設(shè)計(jì)的編碼器能夠在0.256s內(nèi)完成對(duì)一幀512×512的灰度圖像的編碼。 關(guān)鍵詞: 基于最優(yōu)截?cái)嗟那度胧骄幋a JP ...…

查看全部問(wèn)答∨

AVR中的eeprom問(wèn)題

我用的mega128對(duì)他的eeprom操作,其中寫數(shù)據(jù)可以 。問(wèn)題是我寫進(jìn)數(shù)據(jù)后然后讀還可以,但我賦初值之后,然后讀缺不是我賦的原值。有誰(shuí)了解么…

查看全部問(wèn)答∨

大家在用ise10.1的時(shí)候,有沒(méi)有遇到這樣的情況?

大家在用ise10.1的時(shí)候,有沒(méi)有遇到這樣的情況:map成功后,一進(jìn)入布局布線就出錯(cuò)退出,沒(méi)有任何錯(cuò)誤提示? 這個(gè)怎么整啊,都不知道錯(cuò)誤出在哪里!…

查看全部問(wèn)答∨

那位大哥大姐幫幫忙啊 ,

關(guān)于用單片機(jī)設(shè)計(jì)單體液壓支柱密封質(zhì)量檢測(cè)的資料,謝謝了,謝謝了…

查看全部問(wèn)答∨

avr的bootloader怎么用

菜鳥。剛學(xué)習(xí)avr單片機(jī)。先要實(shí)現(xiàn)atmega128的在線更新功能。但是對(duì)avr不熟悉。請(qǐng)問(wèn)可以調(diào)用再帶的庫(kù)函數(shù)來(lái)編寫程序么?怎么用?有什么avr的學(xué)習(xí)資料么?郵箱:yuanzaikang-no.1@163.com 不甚感激!…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 资兴市| 古田县| 黄大仙区| 永州市| 井冈山市| 嘉鱼县| 邢台市| 辛集市| 云南省| 阿尔山市| 开江县| 沽源县| 巢湖市| 察雅县| 鄂伦春自治旗| 宁城县| 郎溪县| 西峡县| 红河县| 宣武区| 开封县| 阳西县| 尼玛县| 榆林市| 元江| 深州市| 苗栗县| 洪洞县| 满洲里市| 伊金霍洛旗| 汕尾市| 天柱县| 德昌县| 永仁县| 白朗县| 吴堡县| 綦江县| 泸溪县| 金沙县| 名山县| 临清市|