完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一,打开cubemx,配置时钟等参数,具体操作方法和上一节一样
二,配置串口1 在cubemx上打开串口1,并设置波特率,其他参数保持默认,配置完成如下图所示: 三,打开串口中断 点击NVIC SETTING,勾选相应选项如下图 四、生成代码,具体方法与上节一样 1、在usart.c中添加如下代码: uint8_t aRecBuff[1]; uint8_t Uart1Buff[REC_LEN]; uint16_t USART_RX_STA=0; int fputc(int ch, FILE *f)//printf的重映射 { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch; } 2、 添加中断回调函数(参考正点原子函数接收方法) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) { if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(aRecBuff[0]!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(aRecBuff[0]==0x0d)USART_RX_STA|=0x4000; else { Uart1Buff[USART_RX_STA&0X3FFF]=aRecBuff[0] ; USART_RX_STA++; if(USART_RX_STA>(REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } } } } } 3、在stm32f7xx_it.c文件中的void USART1_IRQHandler(void)函数中添加如下代码,以保证进入串口中断后再次开启接收中断,添加完成的代码如下: void USART1_IRQHandler(void) { /* USER CODE BEGIN USART1_IRQn 0 */ /* USER CODE END USART1_IRQn 0 */ HAL_UART_IRQHandler(&huart1); /* USER CODE BEGIN USART1_IRQn 1 */ HAL_UART_Receive_IT(&huart1,aRecBuff,1); /* USER CODE END USART1_IRQn 1 */ } 4、在主函数中添加代码开启串口接收中断 HAL_UART_Receive_IT(&huart1,aRecBuff,1); 1 5、在主循环添加代码,串口接收完成后,打印接收的内容(注;串口发送的内容需以换行符结尾),更改完成的主函数如下所示: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* Enable I-Cache---------------------------------------------------------*/ SCB_EnableICache(); /* Enable D-Cache---------------------------------------------------------*/ SCB_EnableDCache(); /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart1,aRecBuff,1); printf("uart test is run!!!rn"); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(USART_RX_STA&0x8000) { printf("recdata is :%srn",Uart1Buff); USART_RX_STA=0; memset(Uart1Buff,0,REC_LEN); } } /* USER CODE END 3 */ } 如果编译memset出错,则添加string.h头文件即可。 五,编译下载,打开串口调试助手观察现象 开机系统打印uart test is run!!!,向串口发送“这是一个串口实验”,则在串口就会显示“recdata is :这是一个串口实验":(注:发送新行需要勾选) |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1792 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1626 浏览 1 评论
1094 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
732 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1682 浏览 2 评论
1943浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
740浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
577浏览 3评论
600浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
562浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 04:28 , Processed in 0.822007 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号