本帖最后由 Ketose 于 2015-10-29 19:14 编辑
今天学习使用Cube下使用FreeRTOS+串口,目的是使用DMA把串口的信息转发出来,其中使用了FreeRTOS的信息机制。
通讯原理就是上位机先发两个字节的包头,指示上位机要传偷的数据大小,然后紧跟着发送传输的数据。MCU收到信息后,去掉包头,把信息回显出来。
原理图:
其实PA2,PA3是连接到ST-LINK的,ST-LINK通过USB在电脑上虚拟了一个串口。
我的电脑上的虚拟串口:
Cube操作如下,首先New Project选择如下:
选择OK之后,配置要使用的部件如下:
因为要使用FreeRTOS所以这个要选上
然后是USART2选择异步:
PA5连接LED做为工作指示使用,配置成输出:
时钟配置如下:
然是配置外设部分,首先是配置USART2,USART2只需要配置发送使用DMA方式,把USART2的中断设置为Enable,其它参数不变。
NVIC配置如下:
FreeRTOS增加一个Usart2接收任务:
OK,所有的配置完了成,可以生成项目了。生成项目的时候把下面选项选上,生成的代码会更条理一些。
下面就是代码部分了:freertos.c里添加如下代码:
- /* StartDefaultTask function */
- void StartDefaultTask(void const * argument)
- {
- /* USER CODE BEGIN StartDefaultTask */
- /* Infinite loop */
- for(;;)
- {
- HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
- osDelay(1000);
- }
- /* USER CODE END StartDefaultTask */
- }
- /* UartReceiveTask function */
- void UartReceiveTask(void const * argument)
- {
- /* USER CODE BEGIN UartReceiveTask */
- /* Infinite loop */
- for(;;)
- {
- HAL_UART_Receive_IT(&huart2,receiveBuffer,2);
- receiveCase = 1;
- osSignalWait(SIGNAL_01,osWaitForever);
- HAL_UART_Receive_IT(&huart2,receiveBuffer,receiveCount);
- receiveCase = 2;
- osSignalWait(SIGNAL_02,osWaitForever);
- }
- /* USER CODE END UartReceiveTask */
- }
main.c文件里添加的代码:
- /**
- * @}
- */
- /*UART ½ÓÊÕÍê³É»Øµ÷º¯Êý*/
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if(receiveCase == 1)
- {
- receiveBuffer[2] = 0x0;
- receiveCount = atoi((char*)receiveBuffer);
- osSignalSet(uartRxTaskHandle,SIGNAL_01);
- }
- if(receiveCase == 2)
- {
- receiveBuffer[receiveCount] = 0x0;
- sprintf(displayBuffer,"STM32F4:>%s",receiveBuffer);
- int displayLen = strlen(displayBuffer);
- receiveBuffer[displayLen] = 0x0;
- HAL_UART_Transmit_DMA(&huart2,(uint8_t*)displayBuffer,displayLen);
- }
- }
- /*UART dma·¢ËÍÍê³É»Øµ÷*/
- void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
- {
- HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
- if(receiveCase == 2)
- {
- osSignalSet(uartRxTaskHandle,SIGNAL_02);
- }
- }
- /**
- * @}
- */
统译下载至开发板。效果如下:
UART.rar
(1.27 MB, 下载次数: 68)
网站不支持GIF,没办法,只有打个包
源码为7z格式,下载了自己改名为.7z:
Usart_Test.7z.rar
(1.59 MB, 下载次数: 87)
|