<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 實(shí)現STM32的串口數據發(fā)送和printf函數重定向

實(shí)現STM32的串口數據發(fā)送和printf函數重定向

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò ) 收藏
在調試電機驅動(dòng)程序的時(shí)候,是不能隨便利用中斷來(lái)進(jìn)行一些寄存器或數據的查看的,不然你在運行的時(shí)候突然來(lái)一下,如果占空比大的話(huà)那可能直接就把MOS管給燒了,所以我們很多情況下只能使用USART(串口)來(lái)進(jìn)行程序的調試和數據的監控了。

對于STM32來(lái)說(shuō),由于很多內容都是有庫來(lái)實(shí)現的,那就省了很多時(shí)間,直接看個(gè)例子就可以寫(xiě)了,大致有4步步驟:

本文引用地址:http://dyxdggzs.com/article/201611/317101.htm
1 1、RCC始終初始化,對端口和USARTX使能時(shí)鐘2 2、初始化端口功能,RX設置為輸入懸空,TX設置為復用功能的推挽輸出,注意GPIO_SPEED要設置下,我沒(méi)設置弄了半天都沒(méi)輸出3 3、設置USARTX寄存器,波特率、數據位、校驗位、停止位等4 4、看需要是否開(kāi)中斷,我這里沒(méi)開(kāi)

設置完后其實(shí)是可以發(fā)簡(jiǎn)單的數據了,不過(guò)如果要實(shí)現一些復雜的輸出就需要自己去寫(xiě)相應的函數,還不一定能都實(shí)現,那該怎么才能跟好實(shí)現串口的數據輸出呢?

這里就可以用到Printf函數,之前一直看個(gè)可以重定向這個(gè)函數來(lái)出現輸出,就是以前片子資源少,就沒(méi)想過(guò)用這個(gè)函數了,現在就有機會(huì )試試了。查了下,發(fā)現其實(shí)還是很簡(jiǎn)單的,就是重定向一個(gè)函數就好了。

1 #include //標準的庫函數2 3 //重寫(xiě)這個(gè)函數就可以了4 #ifdef _PRINTF_5 int fputc(int ch, FILE *f)6 {7    USART_SendData(USART3, (u8) ch);8 9    while(!(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == SET))10    {11    }12 13    return ch;14 }15 #endif

還有修改下IDE的設置,我的是用IAR,進(jìn)到option->general option->library configuration下,把library從normal改為full,好了,下面使用printf輸出數據就OK了,對于調試來(lái)說(shuō)還是相當好用的。

初始化設置:

void Uart_RccInit(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBs);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);}void Uart_GpioInit(void){GPIO_InitTypeDef GPIO_InitStructure;//PB10作為US1的TX端,打開(kāi)復用,負責發(fā)送數據GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度設置,不設置可能導致無(wú)輸出GPIO_Init(GPIOB, &GPIO_InitStructure);//PB11作為US1的RX端,負責接收數據GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);}void Uart_UartInit(void){USART_InitTypeDef USART_InitStructure;USART_StructInit(&USART_InitStructure);USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_Init(USART3, &USART_InitStructure);// USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);USART_Cmd(USART3, ENABLE);}



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>