|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
printf函数重新指定输出
原因:STM32里没有printf函数,由于习惯方便,把系统屏幕打印函数从新指定输出方向到串口,具体函数功能还没研究
如果不用printf,也可以直接用库里的USART_SendData(USART1,(u8)ch);
放在程序里就可以直接使用printf输出到串口
int fputc(int ch,FILE *p) //函数默认的,在使用printf函数时自动调用
{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}
串口及其对应IO配置,串口是定义好针脚的,我的芯片是GPIOA的9跟10
因为串口配置对应针脚是固定的,所以把IO与串口放在一起配置了,算是一个整体
void UsartIO_Set(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure; //这两个也是固定声明格式
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //IO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //IO复用时钟 意思是这个口本来是IO用,现在用它干别的就算复用
//凡是用IO口不干输入输出,就都算复用
//USART1 Tx(PA.09)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //发送脚配置成输出模式
GPIO_Init(GPIOA, &GPIO_InitStructure); //针脚发送与接收分开配置,配置完还得分别把配置信息发送给处理器
//USART1 Rx(PA.10)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //接收脚配置成输入
GPIO_Init(GPIOA, &GPIO_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_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件控制
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //模式
USART_Init(USART1, &USART_InitStructure); //把串口配置带入处理器
USART_Cmd(USART1, ENABLE); //启用串口
}
串口输出hello world
int main(void)
{
UsartIO_Set(); //配置设备信息
while(1)
{
printf("hello world!"); //每秒串口输出一次
Delayms(1000); //加个延时方便观察串口输出
}
}
|
|