#stm32#printf函数快速实现#DHT11模块的实现
在编写c时候,我们可以直接调用“printf”,因为此输出功能已经被人封装在c代码的头文件中。而在keil编写单片机程序时候,printf语句也起着重要作用,通过串口输出功能,能实现printf的多种巧用,可起代码调试功能。
第一步:
在主函数添加此函数,并在主函数上进行申明
#include "sys.h"
void My_USART1(void);
int main(void)
{
u8 temper;
u8 humi;
u8 temp;
delay_init();
My_USART1();
DHT11_Init();
while(1)
{
temp = DHT11_Read_Data(&temper,&humi);
if(temp ==0)
{
printf("temperature is %d\r\n",temper);
printf("humidity is %d\r\n",humi);
delay_ms(1000);
}
};
}
void My_USART1()
{
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART1_InitStrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//PA9
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_10;//PA10
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStruct);
USART1_InitStrue.USART_BaudRate = 9600;
USART1_InitStrue.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART1_InitStrue.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
USART1_InitStrue.USART_Parity = USART_Parity_No;
USART1_InitStrue.USART_StopBits=USART_StopBits_1;
USART1_InitStrue.USART_WordLength = USART_WordLength_8b;
USART_Init( USART1, &USART1_InitStrue);
USART_Cmd(USART1,ENABLE);
}
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
return (ch);
}
第二部:在.h文件中添加申明#include“stdio.h”
第三步:勾选Use MicroLIB
实现上面三步后即可快速实现printf函数功能,打开串口助手即可获取你想要输出的字符,我上诉代码则实现了DHT11模块读取的温湿度数值进行输出。在主函数调用的头文件中进行DHT11文件的调用(#include “DHT11.h”)。此处应用指针取地址的方式读取出数值。
注意:在主函数中,如要调用哪些函数,第一步要进行初始化函数。