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格式化输出本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
- ¥15 minist数字识别
- ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
- ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
- ¥15 网上下载的3DMAX模型,不显示贴图怎么办
- ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
- ¥15 Mac(标签-IDE|关键词-File) idea
- ¥15 潜在扩散模型的Unet特征提取
- ¥15 iscsi服务无法访问,如何解决?
- ¥15 感应式传感器制作的感应式讯响器