419|1

170

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【ST NUCLEO-U083RC】学习笔记03(串口应用) [复制链接]

### 3.1:串口收发

1:硬件设计

image-20240529084712489

单片机引脚为PA2和PA3。对应STLINK虚拟串口。

image-20240529084800317

2:软件设计

先配置cubemx的引脚状态:

image-20240529085221541

自动化生成代码之后,进行串口重定义:

  1. int fputc(int ch, FILE *f)
  2. {
  3. /* Place your implementation of fputc here */
  4. /* e.g. write a character to the USART2 and Loop until the end of transmission */
  5. HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
  6. return ch;
  7. }

keil选项设置,使能Use Micro LIB。

image-20240529091233355

编写测试程序,每隔500ms打印一次hello world。

  1. while (1)
  2. {
  3. /* USER CODE END WHILE */
  4. /* USER CODE BEGIN 3 */
  5. /* Output a message on Hyperterminal using printf function */
  6. printf("hello world\n\r");
  7. /* Insert delay 100 ms */
  8. HAL_Delay(500);
  9. }

打开串口调试助手,查看是否打印输出。

image-20240529091503105

接着进行串口接收设置;

image-20240529091740427

编写串口接收回调函数:

  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3. /* Prevent unused argument(s) compilation warning */
  4. UNUSED(huart);
  5. if(huart->Instance == USART2) //检查是否为USART2串口
  6. {
  7. // 在UART接收完成回调函数中,根据接收到的数据进行不同的处理
  8. switch(rx_data[0])
  9. {
  10. case 0x30:
  11. // 如果接收到的数据为 0,则关闭LED
  12. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
  13. printf("led_off\r\n");
  14. break;
  15. case 0x31:
  16. // 如果接收到的数据为 1,则打开LED
  17. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
  18. printf("led_on\r\n");
  19. break;
  20. default:
  21. // 如果接收到的数据不在上述情况中,不执行任何操作
  22. break;
  23. }
  24. // 启动下一次异步接收
  25. HAL_UART_Receive_IT(&huart2, (uint8_t*)rx_data, 1);
  26. }
  27. }

主要思路如下:

  1. //1:用户通过串口助手发送 0/1/2/3 一字节的数据,数据保留到rx_data缓冲区;
  2. //2:通过 HAL_UART_Receive_IT(&huart1, rx_data, 1),启动接收来自rx_data缓冲区的1字节数据,当收到1字节的数据时,UART 接收中断会被触发。在中断回调处理函数 HAL_UART_RxCpltCallback 中,处理接收到的数据,开始switch-case判断,根据用户发送的数据执行对应的代码,比如接收到的数据为1,则打开LED,比如接收到的数据为0,则关闭LED,之后再次调用 HAL_UART_Receive_IT 来启动下一次接收。
  3. //3:如此反复,用户可以不断的从串口发送1字节数据,来控制LED的亮灭。
  4. 具体实现结果,如下视频所示:
串口收发(待转码)

查看精华帖全部内容,请登录或者注册
此帖出自stm32/stm8论坛

最新回复

感谢分享!   详情 回复 发表于 2024-5-29 15:44

赞赏

1

查看全部赞赏

点赞(1) 关注
 

回复
举报

7207

帖子

11

TA的资源

版主

沙发
 

感谢分享!

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 7

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表