STM32之中断和DMA通信 |
您所在的位置:网站首页 › 为什么程序中的printf不执行文件 › STM32之中断和DMA通信 |
一、什么是中断
1.中断即打断,实至CPU再执行当前程序时,由于系统出现了某种需要处理的紧急情况,CPU暂停正在执行的程序,转而去执行另一段特殊程序来处理的出现的紧急事务,处理结束后CPU自动返回到原先暂停的程序中去继续执行,这种执行过程由于外界的的原因被中间打断的情况成为中断 二、STM32CUBEMX生成中断点灯代码1.首先打开STM32CUBEMX,新建一个工程,依然选择芯片STM32F103C8 10.开始烧录 1.创建新工程 点击 File->New Pioject或ACCEE TO MCU SELECTOR,创建新工程 选择 STM32F103C8 芯片,点击 Start Project 进入工程 /** 函数功能: 重定向c库函数printf到DEBUG_USARTx输入参数: 无返 回 值: 无说 明:无 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); return ch; }/** 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx输入参数: 无返 回 值: 无说 明:无 */ int fgetc(FILE *f) { uint8_t ch = 0; HAL_UART_Receive(&huart1, &ch, 1, 0xffff); return ch; }main.c文件 在主函数main的while循环中添加发送数据 printf(“hello windows!\r\n”); HAL_Delay(1000);
#define RXBUFFERSIZE 256 //最大接收字节数 char RxBuffer[RXBUFFERSIZE]; //接收数据 uint8_t aRxBuffer; //接收中断缓冲 uint8_t Uart1_Rx_Cnt = 0; //接收缓冲计数 在主函数main中添加开启接收中断的语句 HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef huart) { / Prevent unused argument(s) compilation warning / UNUSED(huart); / NOTE: This function Should not be modified, when the callback is needed, the HAL_UART_TxCpltCallback could be implemented in the user file */ if(Uart1_Rx_Cnt >= 255) //溢出判断 { Uart1_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF); } else { RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; //接收数据转存 if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位 { HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去 while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束 Uart1_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组 } } HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断} /* USER CODE END 4 */ 硬件操作 使用USB-TTL直接进行串口下载,将USB-TTL的GND和3.3V接入STM32系统板的GND和3.3V,然后TXD和RXD分别接入A10和A9引脚。 烧录 创建DMA工程 基本步骤和上面一样的: 点击 File->New Pioject或ACCEE TO MCU SELECTOR,创建新工程 选择 STM32F103C8 芯片,点击 Start Project 进入工程 设置时钟RCC,点击HSE,选择Crystal/Ceramic Resonator 设置USART1,点击Mode,选择Asynchronous,在NVIC Settings中点击Enabled(中断) 在USART1中,点击DMA Settings的Add,添加USART_RX 和USART_TX,传输速率设置为中速Medium,模式设置为Normal,右侧选择Memory;在最右侧的System view中选择DMA,点击Add,添加MEMTOMEM。 2)烧录 BOOT0置1,BOOT1置0,打开mcuisp,选择文件路径,开始烧录。 通过本次STM32中断与DMA通信编程实验,我了解了stm32中断、DMA通信原理和编程方法,自己也是对这个只能是入门,需要学习的地方还很多。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |