实现printf
可以在串口助手里显示所打印的字符
程序:
#include“stdio.h”
#include“uart.h”
#include “stm32f10x.h”//GPIO口初始化
void init_uart_gpio(void){
GPIO_InitTypeDef pa9;
GPIO_InitTypeDef pa10;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
pa9.GPIO_Mode = GPIO_Mode_AF_PP;
pa9.GPIO_Pin = GPIO_Pin_9;
pa9.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init (GPIOA,&pa9);
pa10.GPIO_Mode = GPIO_Mode_IN_FLOATING;
pa10.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA, &pa10);}
//串口中断初始化配置void init_uart1(void){
USART_InitTypeDef usart;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE) ;
usart .USART_BaudRate = 115200;
usart .USART_HardwareFlowControl =USART_HardwareFlowControl_None;
usart. USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
usart .USART_Parity = USART_Parity_No;
usart .USART_StopBits = USART_StopBits_1;
usart. USART_WordLength = USART_WordLength_8b;
USART_Init (USART1,&usart) ;
}
//发送一个字节 void usart_sendbyte(USART_TypeDef*pUSARTx,uint8_t ch){
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET){
}
}
//发送所有字符,不包括‘ ’
void usart_sendstring (USART_TypeDef *pUSARTx, char *data){
while(*data != ‘ ’)
{
usart_sendbyte(pUSARTx,*data);
data++;
}
}
//初始化串口中断
void init_uart_it(void){
USART_Cmd (USART1,ENABLE) ;
//USART_ITConfig (USART1,USART_IT_RXNE,ENABLE) ;
}
//初始化总中断
void init_uart_nvic (void){
NVIC_InitTypeDef nvic;
NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
nvic.NVIC_IRQChannel=USART1_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority=1;
nvic.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&nvic);
}
int fputc(int ch, FILE *f)
{
usart_sendbyte(USART1,ch);
return ch;
}
#pragma import(__use_no_semihosting ) struct __FILE{ int a;};
FILE __stdout;void _sys_exit(int x){}/*void use_microlib (void){}*/void init_uart(void)//调用函数{
init_uart_gpio();
init_uart1();
init_uart_it();
init_uart_nvic();
}
主函数:
#include “stm32f10x.h”
#include“uart.h”
#include“stdio.h”void delay(){
int i;
int j;
for(i=100;i》0;i--){
for(j=100;j》0;j--){
}
}
}
int main(){
init_uart();
while(1){
delay();
printf(“hellon”);
}
}
实现printf
可以在串口助手里显示所打印的字符
程序:
#include“stdio.h”
#include“uart.h”
#include “stm32f10x.h”//GPIO口初始化
void init_uart_gpio(void){
GPIO_InitTypeDef pa9;
GPIO_InitTypeDef pa10;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
pa9.GPIO_Mode = GPIO_Mode_AF_PP;
pa9.GPIO_Pin = GPIO_Pin_9;
pa9.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init (GPIOA,&pa9);
pa10.GPIO_Mode = GPIO_Mode_IN_FLOATING;
pa10.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA, &pa10);}
//串口中断初始化配置void init_uart1(void){
USART_InitTypeDef usart;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE) ;
usart .USART_BaudRate = 115200;
usart .USART_HardwareFlowControl =USART_HardwareFlowControl_None;
usart. USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
usart .USART_Parity = USART_Parity_No;
usart .USART_StopBits = USART_StopBits_1;
usart. USART_WordLength = USART_WordLength_8b;
USART_Init (USART1,&usart) ;
}
//发送一个字节 void usart_sendbyte(USART_TypeDef*pUSARTx,uint8_t ch){
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET){
}
}
//发送所有字符,不包括‘ ’
void usart_sendstring (USART_TypeDef *pUSARTx, char *data){
while(*data != ‘ ’)
{
usart_sendbyte(pUSARTx,*data);
data++;
}
}
//初始化串口中断
void init_uart_it(void){
USART_Cmd (USART1,ENABLE) ;
//USART_ITConfig (USART1,USART_IT_RXNE,ENABLE) ;
}
//初始化总中断
void init_uart_nvic (void){
NVIC_InitTypeDef nvic;
NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
nvic.NVIC_IRQChannel=USART1_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority=1;
nvic.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&nvic);
}
int fputc(int ch, FILE *f)
{
usart_sendbyte(USART1,ch);
return ch;
}
#pragma import(__use_no_semihosting ) struct __FILE{ int a;};
FILE __stdout;void _sys_exit(int x){}/*void use_microlib (void){}*/void init_uart(void)//调用函数{
init_uart_gpio();
init_uart1();
init_uart_it();
init_uart_nvic();
}
主函数:
#include “stm32f10x.h”
#include“uart.h”
#include“stdio.h”void delay(){
int i;
int j;
for(i=100;i》0;i--){
for(j=100;j》0;j--){
}
}
}
int main(){
init_uart();
while(1){
delay();
printf(“hellon”);
}
}
举报