实验一:串口通信<串口调试助手发送数据,数据原样返回>
- 观看原理图:
1.1打开串口1,使用异步通信
2.使用usb串口(与公口串口复用同样的寄存器口PA9,PA10),注意按钮拨动到usb口
注意:第一步打开串口1,使用异步通信后,软件会自动配置好,即第二步不是手动做的,是软件自动完成的.
- 实验步骤:
(1)Cubemx的USART1串口设为异步通信(Asynchronous)
(2)收发数据前,先判断发送或者接收寄存器不为空,看原理图,发送看SR寄存器第7位,接收是第5位.在usart.c写接收和发送函数
void USART1_PutChar(uint8_t ch){
while(!(USART1->SR&(1<<7)));//判断发送寄存器为空,不空等待
USART1->DR=ch;
}
uint8_t USART1_GetChar(void){
while(!(USART1->SR&(1<<5)));//判断接收寄存器为空,不空等待
return USART1->DR;
}
(3)为了main.c中可以使用函数,必须进行声明
void USART1_PutChar(uint8_t ch);//发送
uint8_t USART1_GetChar(void);//接收
(4)main.c的while(1){}中使用
uint8_t ch;
ch = USART1_GetChar();
USART1_PutChar(ch);
HAL_Delay(200);
实验二:printf函数使用与HAL库的USART收发函数
- 实验步骤
(1)printf函数使用
int fputc(int ch, FILE *p)
{
while(!(USART1->SR&(1<<7)));//判断不为空
USART1->DR=ch;
return ch;
}
写上述函数(用来重定位)即可使用printf函数在串口打印
例如:printf("age=%d",x);
(2)HAL库使用
uint8_t ch[10] = {0};
HAL_UART_Receive(&huart1, ch, 10, 100);
HAL_UART_Transmit(&huart1,ch, 10, 100);
使用上述函数也可以串口发送数据,注意与实验一的区别,实验一为寄存器方法,实验二是HAL库方法.