马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一,发送数据
- uint8_t hello[]="Hello,blocking\r\n";
- HAL_UART_Transmit(&huart1,hello,sizeof(hello),500);
复制代码 二,MicroLIB-printf(" hello\r\n")
- #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); return ch; }
复制代码
注意:每次GENERATE CODE确定勾选MicroLIB,波特率==115200 。
三,中断接收不定长数据
1.usart.c下添加
你只需更改huart->Instance为你利用串口号的,注意发送以回车结束。
- uint8_t g_usart_rx_buf[USART_REC_LEN];/* 接收缓冲, 最大USART_REC_LEN个字节. */
- uint16_t g_usart_rx_sta = 0;/* 接收状态 bit15,接收完成标志 bit14,接收到0x0d bit13~0,接收到的有效字节数目 */
- uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if (huart->Instance == USART1) /* 如果是串口1 */
- {
- if ((g_usart_rx_sta & 0x8000) == 0) /* 接收未完成 */
- {
- if (g_usart_rx_sta & 0x4000) /* 接收到了0x0d(即回车键) */
- {
- if (g_rx_buffer[0] != 0x0a) /* 接收到的不是0x0a(即不是换行键) */
- {
- g_usart_rx_sta = 0; /* 接收错误,重新开始 */
- }
- else /* 接收到的是0x0a(即换行键) */
- {
- g_usart_rx_sta |= 0x8000; /* 接收完成了 */
- }
- }
- else /* 还没收到0X0d(即回车键) */
- {
- if (g_rx_buffer[0] == 0x0d)
- g_usart_rx_sta |= 0x4000;
- else
- {
- g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0];
- g_usart_rx_sta++;
- if (g_usart_rx_sta > (USART_REC_LEN - 1))
- {
- g_usart_rx_sta = 0; /* 接收数据错误,重新开始接收 */
- }
- }
- }
- }
- HAL_UART_Receive_IT(huart, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
- }
- }
复制代码 2.usart.h下添加
- #define USART_REC_LEN 200 /* 定义最大接收字节数 200 */
- #define RXBUFFERSIZE 1 /* 缓存大小 */
- extern uint8_t g_usart_rx_buf[USART_REC_LEN]; /* 接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 */
- extern uint16_t g_usart_rx_sta; /* 接收状态标记 */
- extern uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL库USART接收Buffer */
复制代码 3.main.c下开启接收中断
- HAL_UART_Receive_IT(&huart1, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
复制代码 4.验证
- uint8_t len;
- uint16_t times = 0;
- while (1)
- {
- if (g_usart_rx_sta & 0x8000) /* 接收到了数据? */
- {
- len = g_usart_rx_sta & 0x3fff; /* 得到此次接收到的数据长度 */
- printf("\r\n您发送的消息为:\r\n");
- HAL_UART_Transmit(&huart1,(uint8_t*)g_usart_rx_buf, len, 1000); /* 发送接收到的数据 */
- while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC) != SET); /* 等待发送结束 */
- printf("\r\n\r\n"); /* 插入换行 */
- g_usart_rx_sta = 0;
- }
- else
- {
- times++;
- if (times % 200 == 0) printf("请输入数据,以回车键结束\r\n");
- HAL_Delay(10);
- }
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |