完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
串口系列
STM32Cube的串口设置(一)即学即用 通过串口设置第一部分大家应该基本会使用单个串口进行收发了 所以本次介绍通过串口进行转发 【适合情景为一个串口设备波特率为38400,但是接收模块仅支持115200波特率】 一、基本思路 在以上情况下,我们就需要两个串口和一个存储位置,在一个串口接收一个信号之后通过MCU转发到另一个串口以不同的波特率输出。 二、操作步骤 要求:通过串口向PC发送一段字符 1、根据自己的stm32的芯片型号来选择,我这里是STM32F767IGTx 2、选好芯片之后照旧设置RCC为外部时钟 3、使能串口1、3(usart1、usart3),如图: 模式设为异步(Asynchronous)其他默认,波特率可以自己改,USART1为115200Bits/s,USART3为38400Bits/s。 之后再使能串口1、3中断 4、设置中断优先级,如图: 设置中断优先级 5、看原理图,找到串口对应引脚,如图: 我这里是 PA10——>USART1_RX PA9——>USART1_TX PB11——>USART3_RX PB10——>USART3_TX 6、根据对应引脚设置串口引脚,如图: 找到PA9、PA10引脚左键点击分别选择USART1_TX和USART1_RX (不用担心选错选反,针脚的功能是ST公司已经定义好了的) 7、设置时钟树,如图: 这里会搞的按自己习惯搞,不会搞的默认就好,但是不能有里面是红色的框(红色框就是错了意思) 8、项目设置,如图: 红框里的按照自己的Keil版本来 个人喜欢把.c/.h文件分开 9、点击右上角的‘GENERATE CODE’直接生成代码,如图: 10、生成代码后用Keil打开项目并在Application/User中找到usart.c并在/USER CODE BEGIN 0/后添加如下代码,如图: #include struct __FILE { int handle; }; FILE __stdout; void _sys_exit(int x) { x = x; } int fputc(int ch, FILE *f) { while((USART3->ISR&0X40)==0); USART3->TDR=(uint8_t)ch; return ch; } uint16_t USART3_RX_STA=0; uint8_t USART3_RX_BUF[800];//串口转存空间 11、生成代码后用Keil打开项目并在Application/User中找到main.c: 在/USER CODE BEGIN PV/后添加如下代码 extern uint8_t USART3_RX_BUF[800];//重申明外部转存空间 在/* USER CODE BEGIN WHILE */后添加如下代码 HAL_UART_Receive_IT(&huart3,USART3_RX_BUF,1); HAL_UART_Transmit(&huart1,USART3_RX_BUF,sizeof(USART3_RX_BUF),100); \开启中断 在/* USER CODE BEGIN 4 */后添加回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART3) { HAL_UART_Transmit(&huart1,USART3_RX_BUF,1,100);//串口1发送接收buff里的东西 HAL_UART_Receive_IT(&huart3,USART3_RX_BUF,1); //重新开启串口3接收中断 } } 编译、下载 三、实验验证 正所谓没有实验结果的教程都是耍流氓,出结果 目的是USART3接收后通过USART1发送出来,为了正确表达实验内容,首先我将USART3的输入直连在USB,在PC端展示一下USART3的发送内容(这里用了GPS+BD模块): 上图相当于把GPS输出直连USB,所以打开串口调试助手,波特率设置为38400Bits/s 改回原样后重新连接SUART1看情况,USART1的比特率为115200Bits/s,所以串口调试助手波特率也相应进行修改 可知USART1输出和USART3接收的数据一致,到此试验成功。 Good Game!!!!!! 接下来会推出一系列的关于串口使用的分享,有需要的猿们敬请关注!!!!! 以上内容欢迎大家转载引用,标明出处即可!!!!! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1590 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1529 浏览 1 评论
962 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
676 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1572 浏览 2 评论
1856浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
629浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
512浏览 3评论
520浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
495浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-17 04:17 , Processed in 0.815209 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号