STM32CubeMX串口接收数据(中断方式,HAL库)
2018-01-31 16:30
513 查看
系统:linux mint 18.3 xfce 64bit
软件:
STM32CubeMX 4.24
SW4STM32 2.4
链接:https://pan.baidu.com/s/1nxgh1VF 密码:rvzu
开发板芯片:STM32F103RCT6,STM32F407VET6
实现效果:打开两个串口助手窗口,一个是USART1的,一个是USART2的,任意一个串口(串口1或者串口2)发送数据过去就会马上通过该串口返回来。
开篇语:
使用STM32CubeMX和SW4STM32具有的优点:
(1)跨平台开发的优势,win和linux系统都有现成的安装包,安装sw4stm32过程会提升自动安装STLINK驱动
(2)版本升级积极,我觉得这是一个好现象,说明开发者很重视
(3)最重要的是免费!!!不用到处找破解激活
(1)使用STM32CubeMX在Pinout配置好TIM3,PA8、PD2(LED灯)、USART1、USART2,
(2)时钟配置保持默认
(3)设置TIM1时钟,效果是1s进入一次中断
(4)USART1、USART2波特率等置保持不变,设置NVIC,如下图,注意优先级
(5)然后生成SW4STM32工程
(6)使用sw4stm32打开工程
在
如果发现无法实现效果,请检查自己的硬件连接是否正确,还有就是检查USB转TTL是否正常,我就遇到了我的USB转TTL竟然能接收STM32发来的数据但是发送不出去数据,折腾了一晚上,第二天换了个串口线测试是正常的
软件:
STM32CubeMX 4.24
SW4STM32 2.4
链接:https://pan.baidu.com/s/1nxgh1VF 密码:rvzu
开发板芯片:STM32F103RCT6,STM32F407VET6
实现效果:打开两个串口助手窗口,一个是USART1的,一个是USART2的,任意一个串口(串口1或者串口2)发送数据过去就会马上通过该串口返回来。
开篇语:
使用STM32CubeMX和SW4STM32具有的优点:
(1)跨平台开发的优势,win和linux系统都有现成的安装包,安装sw4stm32过程会提升自动安装STLINK驱动
(2)版本升级积极,我觉得这是一个好现象,说明开发者很重视
(3)最重要的是免费!!!不用到处找破解激活
(1)使用STM32CubeMX在Pinout配置好TIM3,PA8、PD2(LED灯)、USART1、USART2,
(2)时钟配置保持默认
(3)设置TIM1时钟,效果是1s进入一次中断
(4)USART1、USART2波特率等置保持不变,设置NVIC,如下图,注意优先级
(5)然后生成SW4STM32工程
(6)使用sw4stm32打开工程
在
main.c添加三处代码,具体位置请大家看提示,整个main.c文件太多就不贴了
/* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ uint8_t aTxBuffer[]="*********串口发送数据××××××××××××\r\n"; uint8_t aRxBuffer1[1]; // 用来接收串口1发送的数据 uint8_t aRxBuffer2[1]; // 用来接收串口2发送的数据 /* USER CODE END PV */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ HAL_UART_Receive_IT(&huart1,aRxBuffer1,1); // Enable the USART1 Interrupt HAL_UART_Receive_IT(&huart2,aRxBuffer2,1); // Enable the USART2 Interrupt HAL_UART_Transmit(&huart1,aTxBuffer,sizeof(aTxBuffer),100); HAL_UART_Transmit(&huart2,aTxBuffer,sizeof(aTxBuffer),100); HAL_TIM_Base_Start_IT(&htim3); // 启动定时器3 while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
/* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) // 判断是由哪个串口触发的中断 { HAL_UART_Transmit(&huart1,aRxBuffer1,1,100); // 接收到数据马上使用串口1发送出去 HAL_UART_Receive_IT(&huart1,aRxBuffer1,1); // 重新使能串口1接收中断 } if(huart->Instance == USART2) { HAL_UART_Transmit(&huart2,aRxBuffer2,1,100); // 接收到数据马上使用串口1发送出去 HAL_UART_Receive_IT(&huart2,aRxBuffer2,1); // 重新使能串口2接收中断 } } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM3) // 判断是由哪个定时器触发的中断 { HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8); } } /* USER CODE END 4 */
如果发现无法实现效果,请检查自己的硬件连接是否正确,还有就是检查USB转TTL是否正常,我就遇到了我的USB转TTL竟然能接收STM32发来的数据但是发送不出去数据,折腾了一晚上,第二天换了个串口线测试是正常的
相关文章推荐
- STM32CubeMX串口接收数据(DMA方式,HAL库)
- STM32F4的HAL库开启串口空闲中断 不定长数据接收很好用
- STM8S003F使用IO口模拟串口(三)使用中断方式发送和接收数据
- 基于HAL库处理UART中断并接收串口传入的数据
- 51单片机中用中断方式实现串口数据发送与接收
- STM32使用串口IDLE中断的两种接收不定长数据的方式
- STM32F207运用串口空闲中断+DMA接收不定长数据
- STM32使用DMA加串口空闲中断接收数据
- STM32CubeMX 串口空闲中断加DMA 实现不定长度收发数据
- stm32 实现串口中断接收浮点型、整型数据
- 串口中断接收方式详细比较
- upD79F8513A(NEC)或upD78F0511A(NEC)之串口0中断发送和接收数据
- STM32-串口超时判断方式接收未知长度数据
- stm32的串口空闲中断接收数据
- 不定长度的中断方式串口接收程序段
- 串口1配合DMA接收不定长数据(空闲中断+DMA接收)
- STM32串口中断方式接收
- STM32—无需中断来实现使用DMA接收串口数据(原创)
- STM32CubeMX串口接收中断
- STM32学习笔记之-串口中断接收不定数据buff