本講主要實(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);
}
上一篇:【stm32f103】stm32 外部中斷(寄存器版)
下一篇:【stm32f103】SysTick實(shí)現(xiàn)延時(shí)(寄存器版)
推薦閱讀
史海拾趣
Daco Semiconductor在成立之初就專注于半導(dǎo)體技術(shù)的研發(fā)與創(chuàng)新。公司由一群對(duì)半導(dǎo)體行業(yè)充滿熱情的工程師創(chuàng)立,他們致力于開發(fā)更高效、更穩(wěn)定的半導(dǎo)體產(chǎn)品。一次偶然的實(shí)驗(yàn)中,Daco的研發(fā)團(tuán)隊(duì)發(fā)現(xiàn)了一種新型的材料組合,這種材料組合能夠顯著提高半導(dǎo)體的性能和穩(wěn)定性。這一技術(shù)突破成為了Daco的核心競(jìng)爭(zhēng)力,也為其在競(jìng)爭(zhēng)激烈的半導(dǎo)體市場(chǎng)中打開了新的局面。
在追求經(jīng)濟(jì)效益的同時(shí),A/D Electronics Inc也積極履行社會(huì)責(zé)任,致力于可持續(xù)發(fā)展。公司注重環(huán)保和節(jié)能,采用環(huán)保材料和節(jié)能技術(shù),減少生產(chǎn)過(guò)程中的環(huán)境污染和資源消耗。此外,公司還積極參與公益事業(yè),為社會(huì)做出貢獻(xiàn)。通過(guò)這些舉措,A/D Electronics Inc不僅贏得了社會(huì)的廣泛認(rèn)可,也為企業(yè)的長(zhǎng)遠(yuǎn)發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
這些故事雖然基于虛構(gòu),但它們反映了電子行業(yè)發(fā)展的一般規(guī)律和趨勢(shì),包括技術(shù)創(chuàng)新、市場(chǎng)拓展、品質(zhì)管理、人才培養(yǎng)以及社會(huì)責(zé)任等方面。這些元素對(duì)于任何一家在電子行業(yè)中發(fā)展起來(lái)的公司來(lái)說(shuō),都是不可或缺的。
在電子行業(yè)快速發(fā)展的今天,創(chuàng)新是企業(yè)持續(xù)發(fā)展的關(guān)鍵。CBI公司始終堅(jiān)持創(chuàng)新驅(qū)動(dòng)的發(fā)展戰(zhàn)略,不斷投入研發(fā)資源,推出具有創(chuàng)新性的電子產(chǎn)品。這些產(chǎn)品不僅滿足了消費(fèi)者的多樣化需求,也為公司帶來(lái)了豐厚的利潤(rùn)回報(bào)。同時(shí),公司還注重知識(shí)產(chǎn)權(quán)保護(hù),通過(guò)申請(qǐng)專利、商標(biāo)等方式,保護(hù)自己的創(chuàng)新成果不受侵犯。
請(qǐng)注意,以上故事均為虛構(gòu),旨在為您提供一個(gè)關(guān)于電子行業(yè)里公司發(fā)展起來(lái)的故事框架。在實(shí)際情況中,不同公司的發(fā)展歷程和故事可能會(huì)有所不同。
電子行業(yè)是一個(gè)充滿競(jìng)爭(zhēng)和變化的領(lǐng)域,企業(yè)需要不斷創(chuàng)新才能應(yīng)對(duì)市場(chǎng)的挑戰(zhàn)。假設(shè)ATC在面對(duì)激烈的市場(chǎng)競(jìng)爭(zhēng)時(shí),始終保持對(duì)創(chuàng)新的追求和投入。公司不僅注重產(chǎn)品技術(shù)的創(chuàng)新,還積極探索新的商業(yè)模式和市場(chǎng)策略。通過(guò)不斷創(chuàng)新,ATC成功應(yīng)對(duì)了市場(chǎng)的各種挑戰(zhàn),保持了穩(wěn)健的發(fā)展態(tài)勢(shì)。
2017年,Exar被MaxLinear公司收購(gòu),這是Exar發(fā)展歷程中的一個(gè)重要里程碑。通過(guò)合并,Exar和MaxLinear的產(chǎn)品和技術(shù)得到了有效整合,兩家公司在模擬和混合信號(hào)領(lǐng)域的優(yōu)勢(shì)得到了進(jìn)一步加強(qiáng)。合并后的公司繼續(xù)在通信、視頻處理、存儲(chǔ)、電源管理和時(shí)鐘管理等多個(gè)領(lǐng)域發(fā)揮重要作用。
2017年,Exar被MaxLinear公司收購(gòu),這是Exar發(fā)展歷程中的一個(gè)重要里程碑。通過(guò)合并,Exar和MaxLinear的產(chǎn)品和技術(shù)得到了有效整合,兩家公司在模擬和混合信號(hào)領(lǐng)域的優(yōu)勢(shì)得到了進(jìn)一步加強(qiáng)。合并后的公司繼續(xù)在通信、視頻處理、存儲(chǔ)、電源管理和時(shí)鐘管理等多個(gè)領(lǐng)域發(fā)揮重要作用。
韓國(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有如下優(yōu)點(diǎn):⑴ 頻率分辨率高,輸出頻點(diǎn)多,可達(dá) 個(gè)頻點(diǎn)(N為相位累加器位數(shù));⑵頻率切換速度快,可達(dá)us量級(jí);⑶ 頻率切換時(shí)相位連續(xù);⑷ 可以輸出寬帶正交信號(hào);⑸ 輸出相位噪聲低,對(duì)參考頻率源的相位噪聲有改善作用;⑹可以產(chǎn)生任意波形;⑺ ...… 查看全部問(wèn)答∨ |
求助:我對(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)答∨ |
我用的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)答∨ |
菜鳥。剛學(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ā)板 精華推薦
- 【下載】LAT1466 USB x Device HID Standalone的移植
- 【下載】LAT1488 STM32 USBxDevice MSC standalone移植示例
- 【下載】LAT1482 STM32G0單線串口通信幀錯(cuò)誤問(wèn)題解析
- 【下載】LAT1473 STM32C0 HAL庫(kù)的SPI 驅(qū)動(dòng)導(dǎo)致的Hardfault問(wèn)題分析
- 【下載】LAT1490 兩個(gè)STM32G0 I2C 通信異常的案例分析
- 【下載】LAT1470 SPI傳輸長(zhǎng)度超過(guò)1024時(shí)出現(xiàn)異常的問(wèn)題分析
- IAR攜手極海半導(dǎo)體,高效開發(fā)全球首款基于Cortex-M52的G32R501實(shí)時(shí)控制MCU
- 迅為IMX6ULL開發(fā)板交叉編譯器的安裝和使用
- 迅為-i.MX6ULL 開發(fā)板-移植OpenCv3.4.1-搭建編譯環(huán)境
- 嵌入式學(xué)習(xí)篇丨迅為4412開發(fā)板Android4.4系統(tǒng)編譯
- Linux系統(tǒng)編程篇丨迅為IMX6ULL-對(duì)應(yīng)視頻講解
- 嵌入式學(xué)習(xí)丨4412開發(fā)板-uboot源碼-匯編-源碼分析(一)嵌入式學(xué)習(xí)丨4412開發(fā)板-uboot源碼-匯
- 迅為IMX6ULL開發(fā)板-主頻和時(shí)鐘配置例程(二)
- 迅為IMX6ULL開發(fā)板-主頻和時(shí)鐘配置例程
- 迅為IMX6ULL開發(fā)板安裝VMware Tool工具
- 文遠(yuǎn)知行采用BlackBerry QNX系統(tǒng),打造極致安全的ADAS解決方案
- IAR攜手極海半導(dǎo)體,高效開發(fā)全球首款基于Cortex-M52的G32R501實(shí)時(shí)控制MCU
- 中國(guó)發(fā)布HDMI和DisplayPort替代方案:GPMI接口來(lái)了
- 三星進(jìn)軍 AI 機(jī)器人領(lǐng)域,Ballie 本周公開亮相
- 消息稱美光即日起針對(duì)存儲(chǔ)模組產(chǎn)品向美國(guó)客戶征收“關(guān)稅附加費(fèi)”
- 迅為IMX6ULL開發(fā)板交叉編譯器的安裝和使用
- 迅為-i.MX6ULL 開發(fā)板-移植OpenCv3.4.1-搭建編譯環(huán)境
- BOE(京東方)董事長(zhǎng)提議回購(gòu)公司股份 堅(jiān)定看好資本市場(chǎng)長(zhǎng)期價(jià)值
- 英飛凌宣布收購(gòu)Marvell的汽車以太網(wǎng)業(yè)務(wù)
- 強(qiáng)強(qiáng)聯(lián)合!兆易創(chuàng)新與納微半導(dǎo)體達(dá)成戰(zhàn)略合作
- 魅族18系列將默認(rèn)開啟限制應(yīng)用跟蹤
- 東芝值不值208億美元收購(gòu)價(jià),取決鎧俠的價(jià)值
- 10平臺(tái)承諾不用大數(shù)據(jù)殺熟;礦泉水公司注冊(cè)logo遭蘋果反對(duì)
- 南理工等開發(fā),高集成神經(jīng)形態(tài)人工視覺(jué)光電傳感器問(wèn)世
- 西門子推出PCBflow
- 全面復(fù)盤日內(nèi)瓦車展:馬斯克:BBA里面沒(méi)一個(gè)能打的
- 氫燃料電池與純電動(dòng)孰優(yōu)孰劣?對(duì)比來(lái)看就明白了
- 2019,動(dòng)力電池大變局
- 康佳發(fā)布全景AI技術(shù) 支持全時(shí)語(yǔ)音人臉識(shí)別
- TCL冰箱洗衣機(jī)白電品牌高端化時(shí)機(jī)來(lái)臨
- LM2776電荷泵無(wú)法啟動(dòng)問(wèn)題
- LM8962+2.8寸LCD+OV7670攝像頭 采集圖像不穩(wěn)定
- 請(qǐng)教常用的軟件
- 關(guān)于SysCtlPeripheralEnable和SysCtlPeripheralPowerOn
- avr的bootloader怎么用
- WinCE5.0系統(tǒng)啟動(dòng)后自動(dòng)識(shí)別U盤?
- TI的CC2541DK-SENSOR發(fā)貨推遲了
- AVR中的eeprom問(wèn)題
- 為啥子CC2530的PWM一定要用備用位置2呢?
- 【再見(jiàn)2021,你好2022】2021的第一次