int main(void)
{
uint16_t Buf[2] = {0};
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t * )Buf, 2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
printf("ADC1=%d\n\r", Buf[0]);
HAL_UART_Transmit(&huart1, Buf, sizeof(Buf), 10000);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
stm32串口传输乱码是为什么?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- qllaoda 2023-03-21 09:42关注
因为你的串口传输的是原始数值,而数值对应的ascii码一般都不是可显示字符,即使可显示也不是你想要的,所以当然就是“乱码”,你也说了hex模式是正常的,那自然就不是文本了,接收显示用文本模式当然就是乱码了。
说到底还是C语言基础没学好,没搞清字符和数值的区别和联系。
如果你希望传输文本,建议你先把数值转换成对应的文本字符串,可以用sprintf转换
比如
char dispbuf[100]
sprintf(disbuf, "%d", buf[0]);
HAL_UART_Transmit(&huart1, dispbuf, strlen(dispbuf), 10000);
当然,如果print重定向好了,也可以直接用printf格式化输出本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 远程桌面文档内容复制粘贴,格式会变化
- ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
- ¥15 这种微信登录授权 谁可以做啊
- ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题