完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
基于HAL库的多串口通信入门,多串口中断通信,可以发任意字节数据,用的STM32F302CBTx,STM32F103也一样通用。
本例使用三组串口中断互相通信。 1、背景了解和工具 现在开发stm32一般有几种方式,如下 HAL库开发: STM32CubeMX中可以下载各个stm系列的HAL库,集成stm常见的外设,便于一键生成项目代码。STM32CubeMX是ST公司现在主推的一个配置工具,可以下载HAL库,直接由图形界面简单配置下,生成初始化代码,并对外设做了进一步的抽象,方便快捷,但出问题时,不熟悉的情况下容易无从下手。 标准外设库(STD)开发: 是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。一般每个系列的标准库都是不一样的,所以没有可移植性。 寄存器开发: 直接操作寄存器,不使用stm官方的库,容易操作,但对寄存器操作要比较熟悉。 2、工具下载安装 STM32CubeMX,本人用的5.2版 官方链接https://www.st.com/en/development-tools/stm32cubemx.html,官方没有的话后面有下载地址 Keil5,用来编译STM32CubeMX生成的工程项目 两个工具包下载 链接:https://pan.baidu.com/s/1IFu5eLlBD31gcEenxwt37Q 提取码:p04j 下载后自行安装,STM32CubeMX运行需要安装JAVA运行环境,直接百度安装java环境 3、STM32CubeMX设置 打开,下载stm32f302cbtx库,步骤如下 4、建立工程 依次打开 File > New Project,此时会自动弹出下载选型的的界面,下好后,选STM32F302CB双击确定进入工程界面 1)配置晶振和配置时钟 2)配置串口usart1、usart2、usart3 波特率115200,使能中断,使能中断优先级,三组串口都要配置,再检查下串口时钟,串口引脚可以看右边的芯片图,也可以自定义 3)生成项目 设置项目名,保存路径,生成项目后的编译工具(MDK-ARM V5就是ARM版Keil5),编译的默认库,再点generate code 5、Keil5编译工程项目 1)添加使能串口的函数,添加三组串口自发自收的函数,注意在USER CODE BEGIN和END之间,否则再次编译cubemx时会被覆盖,编译 main函数外代码如下 /* USER CODE BEGIN 0 */uint8_t Uart1RX_Data,Uart2RX_Data,Uart3RX_Data;void USART_IT_Start(void){ HAL_UART_Receive_IT(&huart1,&Uart1RX_Data,1); HAL_UART_Receive_IT(&huart2,&Uart2RX_Data,1); HAL_UART_Receive_IT(&huart3,&Uart3RX_Data,1);}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(huart->Instance == USART1) { HAL_UART_Transmit(&huart1,&Uart1RX_Data,1,0xFFFF); HAL_UART_Receive_IT(&huart1,&Uart1RX_Data,1); } if(huart->Instance == USART2) { HAL_UART_Transmit(&huart2,&Uart2RX_Data,1,0xFFFF); HAL_UART_Receive_IT(&huart2,&Uart2RX_Data,1); } if(huart->Instance == USART3) { HAL_UART_Transmit(&huart3,&Uart3RX_Data,1,0xFFFF); HAL_UART_Receive_IT(&huart3,&Uart3RX_Data,1); } }/* USER CODE END 0 */ main函数调用函数 /* USER CODE BEGIN 2 */ USART_IT_Start(); /* USER CODE END 2 */ 2)下载设置,设置为J-LINK下载(目前用的J-LINK,swd下载选择ST Link),选择设置芯片,设置Port为SW,设置10MHz,检查右边有没发现jlink,没有多试几次,设置flashdowload选项里的Reset and Run,这样程序烧写后才会运行(zz设定),再点击download下载程序 6、修改 程序烧写后,会发现发送短数据,收发没问题,但长的数据,容易发生不进中断的情况(可以在中断中加led闪烁程序),修改代码如下,加入一个标志位,在串口中断时若串口堵塞时置位,再在main函数中再使能中断 main.c main.h stm32f0xx_it.c的串口中断处理函数加入如下代码 效果如下 若要串口1发给串口3,则可以将函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)中改为如下 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1154 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1185 浏览 1 评论
603 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
451 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1099 浏览 2 评论
1650浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
315浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
315浏览 3评论
308浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
283浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-27 21:56 , Processed in 0.831088 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191