USART3 外接 RS485
UART7 外接 RS232
//USART支持同步传输,UART只支持异步传输,其他一样,备注一下
//本例程都做异步传输
1-5步在main.c文件中
1、STM32CubeMX自动生成

UART_HandleTypeDef huart7;
UART_HandleTypeDef huart3;

2、新增接收缓冲区

u8 aRxBuffer_uart3[64]={0};
u8 aRxBuffer_uart7[64]={0};

3、STM32CubeMX自动生成

static void MX_UART7_Init(void);
static void MX_USART3_UART_Init(void);

4、STM32CubeMX自动生成

int main(void)
{......MX_UART7_Init();MX_USART3_UART_Init();......
}

5、STM32CubeMX自动生成

static void MX_UART7_Init(void)
{/* USER CODE BEGIN UART7_Init 0 *//* USER CODE END UART7_Init 0 *//* USER CODE BEGIN UART7_Init 1 *//* USER CODE END UART7_Init 1 */huart7.Instance = UART7;huart7.Init.BaudRate = 115200;huart7.Init.WordLength = UART_WORDLENGTH_8B;huart7.Init.StopBits = UART_STOPBITS_1;huart7.Init.Parity = UART_PARITY_NONE;huart7.Init.Mode = UART_MODE_TX_RX;huart7.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart7.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart7) != HAL_OK){Error_Handler();}/* USER CODE BEGIN UART7_Init 2 */HAL_UART_Receive_IT(&huart7, (u8 *)aRxBuffer_uart7, 1);**//开启接收中断,如果没有自动生成就要自己加入**/* USER CODE END UART7_Init 2 */}
static void MX_USART3_UART_Init(void)
{/* USER CODE BEGIN USART3_Init 0 *//* USER CODE END USART3_Init 0 *//* USER CODE BEGIN USART3_Init 1 *//* USER CODE END USART3_Init 1 */huart3.Instance = USART3;huart3.Init.BaudRate = 115200;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart3) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART3_Init 2 */HAL_UART_Receive_IT(&huart3, (u8 *)aRxBuffer_uart3, 1);// 即Size设置为1,只接收1Byte数据,在每次中断结束后重新配置来使能中断。/* USER CODE END USART3_Init 2 */}

6、STM32CubeMX自动生成,如果没有自己加入
stm32f4xx.hal.msp.c文件中

void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(huart->Instance==UART7){....../* USER CODE BEGIN UART7_MspInit 1 */HAL_NVIC_SetPriority(UART7_IRQn, 3, 3);//设置中断HAL_NVIC_EnableIRQ(UART7_IRQn);;//设置中断/* USER CODE END UART7_MspInit 1 */}else if(huart->Instance==USART3){....../* USART3 interrupt Init */HAL_NVIC_EnableIRQ(USART3_IRQn);//设置中断HAL_NVIC_SetPriority(USART3_IRQn, 3, 3);//设置中断}
}

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)函数中如果没有自动生成,加入:
HAL_NVIC_DisableIRQ(UART7_IRQn);
HAL_NVIC_DisableIRQ(USART3_IRQn);
这个不是必须的,不写也不影响.

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{if(huart->Instance==UART7){/* USER CODE BEGIN UART7_MspDeInit 0 *//* USER CODE END UART7_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_UART7_CLK_DISABLE();/**UART7 GPIO ConfigurationPF6     ------> UART7_RXPF7     ------> UART7_TX*/HAL_GPIO_DeInit(GPIOF, GPIO_PIN_6|GPIO_PIN_7);/* USER CODE BEGIN UART7_MspDeInit 1 */HAL_NVIC_DisableIRQ(UART7_IRQn);       //初始化关中断/* USER CODE END UART7_MspDeInit 1 */}else if(huart->Instance==USART3){/* USER CODE BEGIN USART3_MspDeInit 0 *//* USER CODE END USART3_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_USART3_CLK_DISABLE();/**USART3 GPIO ConfigurationPC10     ------> USART3_TXPC11     ------> USART3_RX*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);/* USART3 interrupt DeInit */HAL_NVIC_DisableIRQ(USART3_IRQn);       //初始化关中断/* USER CODE BEGIN USART3_MspDeInit 1 *//* USER CODE END USART3_MspDeInit 1 */}}

7、STM32CubeMX自动生成,如果没有自己加入
stm32f4xx.it.c文件中

extern UART_HandleTypeDef huart3;
extern UART_HandleTypeDef huart7;
void USART3_IRQHandler(void)
{/* USER CODE BEGIN USART3_IRQn 0 *//* USER CODE END USART3_IRQn 0 */HAL_UART_IRQHandler(&huart3);/* USER CODE BEGIN USART3_IRQn 1 *//* USER CODE END USART3_IRQn 1 */
}/* USER CODE BEGIN 1 */
void UART7_IRQHandler(void)
{/* USER CODE BEGIN USART3_IRQn 0 *//* USER CODE END USART3_IRQn 0 */HAL_UART_IRQHandler(&huart7);/* USER CODE BEGIN USART3_IRQn 1 *//* USER CODE END USART3_IRQn 1 */
}

8、重写接收中断回调函数,测试
main.c中

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{static int a=0;a++;
//    printf("%d",a);if(huart->Instance==USART3){printf("USART3 %d..%d\n",a,aRxBuffer_uart3[0]);HAL_UART_Receive_IT(&huart3, (uint8_t *)aRxBuffer_uart3, 1);//重开中断}if(huart->Instance==UART7){printf("UART7 %d..%d\n",a,aRxBuffer_uart7[0]);HAL_UART_Receive_IT(&huart7, (uint8_t *)aRxBuffer_uart7, 1);//重开中断}
}

9、发送测试,这段代码可以放在main.c文件main()函数while(1){}中,或其他定时或外部中断函数中测试

static int TEAT_num=0;
TEAT_num++;
//  printf("ttest = %x\n", TEAT_num);//测试OK
RS485_OUT=1;//485输出
delay_us(20);//10us会有错误,485外部硬件电路不同,延时时间可能不同
HAL_UART_Transmit(&huart3, (uint8_t *)&TEAT_num, 1, 0xFFFF);//huart3 485
while(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_TC)!=SET);//等待发送完成
RS485_OUT=0;//485输入
HAL_UART_Transmit(&huart7, (uint8_t *)&TEAT_num, 4, 0xFFFF);//huart7 串口
while(__HAL_UART_GET_FLAG(&huart7,UART_FLAG_TC)!=SET);//等待发送完成

10、如果用printf 打印输出数据
则重定义int fputc(int ch, FILE *f);函数

//int fputc(int ch, FILE *f)
//{
//    ITM_SendChar(ch);
//    return ch;
//}//int fputc(int ch, FILE *f)
//{//  RS485_OUT=1;//485输出
//  delay_us(20);
//  HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);
//  while(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_TC)!=SET);//等待发送完成
//  RS485_OUT=0;//485输入
//  return ch;
//}
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart7, (uint8_t *)&ch, 1, 0xFFFF);while(__HAL_UART_GET_FLAG(&huart7,UART_FLAG_TC)!=SET);//等待发送完成return ch;
}

STM32F429串口设置调试笔记相关推荐

  1. Android adb wifi无线调试 USB和无线串口设置连接 无线adb

    在开发的过程中只提供了一个USB接口,但是USB需要被其他设备占用,这个时候如果要调试,就需要使用无线adb调试. 通过串口设置链接.串口模式下: 串口输入 setprop service.adb.t ...

  2. gpio驱动广播Android,[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示. Recovery中升级完成后控 ...

  3. 展讯平台初步调试笔记

    最近公司换新的平台,之前用MTK的,现在主要是展讯的,当然也要重新学习了. 1.project_sc6600l_sp6601l_trisim_64X32.mk为三卡的FLASH大小为6432的. MS ...

  4. OMAPL138调试笔记

    title: Linux 嵌入式使用 tags: 新建,模板,小书匠 grammar_cjkRuby: true Copyright (C) @2018 Widic Filename:File-fun ...

  5. linux内核 can总线,Linux Canbus调试笔记

    http://blog.csdn.net/flydream0/article/details/8161418 CAN总线在嵌入式Linux下驱动程序的实现 http://www.21ic.com/ap ...

  6. 调试笔记--keil 断点调试小技巧

    调试笔记–keil 断点调试小技巧 给变量打断点 调试不熟悉的项目时,卧槽!怎么这么多全局变量?这玩意又在那修改了??这个时候会给变量打断点就能省好多事. 将要监视的全局变量添加到watch窗口 选中 ...

  7. 串口调试助手 rtc 显示时间_闪电侠串口网络调试助手

    作为一个嵌入式开发工程师,一直苦于没有一个用起来很顺手的串口网络调试工具,于是乎,还等什么呢,自己做呗,废话不多说,今天正式发布一款基于C#开发的[闪电侠串口网络调试助手]. [闪电侠调试助手]是集合 ...

  8. keil4怎么移植其他人的程序_【调试笔记】韦东山:在100ask_imx6ull上移植使用六轴传感器ICM20608...

    之前发了LCD调试笔记,大家很感兴趣,所以这次再来一篇:六轴传感器ICM20608驱动移植笔记,大家还需要什么移植笔记?可以留言.我们尽量满足. 1.1 移植思路 先找到驱动:也许内核里已经有,也许需 ...

  9. 串口调试精灵的使用和串口程序调试技巧

    串口调试精灵的使用和串口程序调试技巧 时间: 2004-12-09 19:04:49 | [<<] [>>]     51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可 ...

最新文章

  1. 升级php7_PHP5.9 升级到PHP7 遇到的一些坑(phpfpm 图解)
  2. 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门
  3. 软件开发项目进度控制浅谈
  4. 通过超图在网页上加载obj格式3D模型
  5. java将数据封装为树结构_JAVA代码实现多级树结构封装对象
  6. SAP Fiori应用里对国际化RTL需求(right-to-left)的支持
  7. php 在函数里打开链接,JavaScript中打开链接的几种方法介绍
  8. 信息学奥赛C++语言:求三角形的面积
  9. 路痴福音!高德地图上线真AR步行导航,可实景指引
  10. Python+tkinter设置Label字体、字号、样式、对齐方式、鼠标形状、响应鼠标事件
  11. Mac远程服务器文件上传rz和sz的安装使用
  12. python之七行代码制作GIF动画
  13. oracle考试试题及其答案,oracle考试试题及答案
  14. 虚拟机无法启动服务器失败,Hyper-V虚拟机无法启动故障图解
  15. Flutter 实现整个App变为灰色
  16. android.os.FileUriExposedException: file:///storage/emulated/0/market/cache/com.moji.mjweather.apk
  17. 从零开始搭二维激光SLAM --- 基于GMapping的栅格地图的构建
  18. 2022考研这一年总结
  19. MATLAB算法实战应用案例精讲-【数据分析】时序异常检测(附实战应用案例)
  20. 路由器到游戏服务器稳定性差,电竞路由器和普通路由器有什么区别!

热门文章

  1. 单片机c语言里 10和%10的区别,10个单片机C语言实例.doc
  2. 创业者该如何选择区块链游戏赛道?
  3. [zz]计算机系研究生薪水一览
  4. 西湖大学开学:新生每月5000元补助,AI博士研究永生课题
  5. 来一起DIY一个人工智能实验室吧
  6. 演讲文档和视频《元宇宙与区块链IT基础设施》下载
  7. 微信小程序课堂考勤正式版
  8. android 设置状态栏全透明,背景延伸到状态栏
  9. 蚂蚁金服 Ant-design 常用组件和属性整理
  10. EasyRecovery帮助找回回收站清空的文件