嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)
printf重定义:
C语言里面的printf函数默认输出设备是显示器,如果要实现printf函数输出正在串口或者LCD显示屏上,必须要重定义标准库函数里调用的与输出设备相关的函数,比如printf输出到串口,需要将fputc里面的输出指向串口。
应用:
usart.h
#ifndef USART_H_ #define USART_H_ void my_usart_init(void); void My_Usart_Send_Byte( USART_TypeDef* USARTx, uint16_t Data); void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string); #endif
usart.c
#include"stm32f10x.h" #include"usart.h" #include "stdio.h" void my_usart_init(void) { GPIO_InitTypeDef GPIOInitstruct; USART_InitTypeDef Usart_initstruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); //A9 GPIOInitstruct.GPIO_Pin = GPIO_Pin_9; GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOA,&GPIOInitstruct); //A10 GPIOInitstruct.GPIO_Pin =GPIO_Pin_10; GPIOInitstruct.GPIO_Mode =GPIO_Mode_IPU; GPIO_Init(GPIOA,&GPIOInitstruct); Usart_initstruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; Usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; Usart_initstruct.USART_BaudRate = 115200; Usart_initstruct.USART_Parity = USART_Parity_No; Usart_initstruct.USART_StopBits = USART_StopBits_1; Usart_initstruct.USART_WordLength = USART_WordLength_8b; USART_Init(USART1,&Usart_initstruct); USART_Cmd(USART1,ENABLE); } void My_Usart_Send_Byte(USART_TypeDef* USARTx, uint16_t Data) { USART_SendData(USARTx, Data); while( USART_GetFlagStatus( USARTx, USART_FLAG_TXE) == RESET); } void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string) { uint16_t i=0; do { My_Usart_Send_Byte(USARTx,*(string+i)); i++; }while(*(string+i) != '\0'); while( USART_GetFlagStatus( USARTx, USART_FLAG_TC) == RESET); } int fputc(int ch, FILE * p) //printf重定义 { USART_SendData(USART1, (u8)ch); while( USART_GetFlagStatus( USART1, USART_FLAG_TXE) == RESET); return ch; }
main.c
#include "stm32f10x.h" #include "main.h" #include "led.h" #include "bear.h" #include "key.h" #include "shake.h" #include "usart.h" #include "stdio.h" void delay(uint16_t time) { uint16_t i=0; while(time--) { i =12000; while(i--); } } int main() { my_usart_init(); // My_Usart_Send_Byte( USART1, 'A'); // My_Usart_Send_Byte( USART1, 'B'); // My_Usart_Send_Byte( USART1, 'C'); // My_Usart_Send_Sting( USART1, "\r\n"); // My_Usart_Send_Sting(USART1 , "fei \r\n"); while(1) { printf("Hello,shi \r\n"); } }
串口显示
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。