STM32CUBE配置
一、使用printf发送数据,在usart.c中添加代码串口重定向
/* USER CODE BEGIN 0 */
#include <stdio.h>
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//注意把&huart1改为自己的stm32使用的串口号
return ch;
}
/* USER CODE END 0 */
while (1)
{
/* USER CODE END WHILE */
ch=2345.1234;
printf("%.2f\r\n",ch);
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}
若是使用库函数发送可用下面的函数
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//串口1 发送的字符数组 几个字符 阻塞时间
不知道几个字符的可以用计算字符长度函数,例如
HAL_UART_Transmit(&huart1, (uint8_t *)"hello",(uint16_t)strlen"hello", 0xFFFF);//strlen函数要先声明string.h头文件
二、中断接收数据
在main函数中添加串口中断函数
/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);//开串口中断
/* USER CODE END 2 */
定义变量接收数据
/* USER CODE BEGIN Includes */
#define RXBUFFERSIZE 256 //最大接收字节数
char RxBuffer[RXBUFFERSIZE]; //接收数据
uint8_t aRxBuffer; //接收中断缓冲
uint8_t Uart1_Rx_Cnt = 0; //接收缓冲计数
/* USER CODE END Includes */
在用户代码中添加中断接收解析代码
/* USER CODE BEGIN 0 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
if(Uart1_Rx_Cnt >= 255) //溢出判断
{
Uart1_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer));
HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF);
}
else
{
RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; //接收数据转存
if((RxBuffer[Uart1_Rx_Cnt-1]==0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2]==0x0D))//判断结束位
{
if(RxBuffer[0] == 'A')//串口数据开头,检测是否是需要的数据,开头为A则让灯取反
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_15); //取反
}
Uart1_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
}
/* USER CODE END 0 */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)