fc1b0482 by 张亚玄

fix uart

1 parent 739e197c
......@@ -59,8 +59,8 @@
#define configCPU_CLOCK_HZ ( SystemCoreClock )
#define configTICK_RATE_HZ ((TickType_t)1000)
#define configMAX_PRIORITIES ( 56 )
#define configMINIMAL_STACK_SIZE ((uint16_t)64)
#define configTOTAL_HEAP_SIZE ((size_t)2560)
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
#define configTOTAL_HEAP_SIZE ((size_t)2048)
#define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0
......
......@@ -27,10 +27,10 @@
#include "main.h"
/* USER CODE BEGIN Includes */
#define USART_REC_LEN 200 // 大接收字节数
#define USART_REC_LEN 200 // �大接收字节数
extern uint8_t USART_RX_BUF[USART_REC_LEN]; // 接收缓冲,最大USART_REC_LEN个字节,末字节为æ¢è¡Œ
extern uint16_t USART_RX_STA; // 接收状
extern uint16_t USART_RX_STA; // 接收状æ??
#define RXBUFFERSIZE 1 // 缓存大å°
extern uint8_t aRxBuffer[RXBUFFERSIZE]; // HAL库USART接收Buffer
......
......@@ -50,7 +50,6 @@
osThreadId_t LEDTaskHandle;
osThreadId_t KeyScanTaskHandle;
osThreadId_t UartTaskHandle;
osThreadId_t CoreTaskHandle;
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
......@@ -60,7 +59,6 @@ osThreadId_t CoreTaskHandle;
void StartLEDTask(void *argument);
void StartKeyScanTask(void *argument);
void StartUartTask(void *argument);
void StartCoreTask(void *argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
......@@ -96,7 +94,7 @@ osKernelInitialize();
const osThreadAttr_t LEDTask_attributes = {
.name = "LEDTask",
.priority = (osPriority_t) osPriorityNormal,
.stack_size = 64
.stack_size = 128
};
LEDTaskHandle = osThreadNew(StartLEDTask, NULL, &LEDTask_attributes);
......@@ -104,7 +102,7 @@ osKernelInitialize();
const osThreadAttr_t KeyScanTask_attributes = {
.name = "KeyScanTask",
.priority = (osPriority_t) osPriorityNormal,
.stack_size = 64
.stack_size = 128
};
KeyScanTaskHandle = osThreadNew(StartKeyScanTask, NULL, &KeyScanTask_attributes);
......@@ -116,14 +114,6 @@ osKernelInitialize();
};
UartTaskHandle = osThreadNew(StartUartTask, NULL, &UartTask_attributes);
/* definition and creation of CoreTask */
const osThreadAttr_t CoreTask_attributes = {
.name = "CoreTask",
.priority = (osPriority_t) osPriorityLow,
.stack_size = 128
};
CoreTaskHandle = osThreadNew(StartCoreTask, NULL, &CoreTask_attributes);
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
/* USER CODE END RTOS_THREADS */
......@@ -191,10 +181,10 @@ void StartUartTask(void *argument)
if (USART_RX_STA & 0x8000)
{
len = USART_RX_STA & 0x3fff; // 获取接收到的数据长度
printf("\r\n接收到的数据:\r\n");
HAL_UART_Transmit(&huart1, (uint8_t*)"\r\nReceived:\r\n", sizeof("\r\nReceived:\r\n"), 1000);
HAL_UART_Transmit(&huart1, (uint8_t*)USART_RX_BUF, len, 1000);
while (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != SET);
printf("\r\n\r\n"); // 插入换行
HAL_UART_Transmit(&huart1, (uint8_t*)"\r\n\r\n", sizeof("\r\n\r\n"), 1000);
USART_RX_STA=0;
}
else
......@@ -202,10 +192,10 @@ void StartUartTask(void *argument)
times++;
if (times % 5000 == 0)
{
printf("\r\n串口实验\r\n");
HAL_UART_Transmit(&huart1, (uint8_t*)"\r\nUART Test\r\n", sizeof("\r\nUART Test\r\n"), 1000);
}
if (times % 200 == 0)
printf("请输入数据,以回车键结束\r\n");
if (times % 1000 == 0)
HAL_UART_Transmit(&huart1, (uint8_t*)"print char\r\n", sizeof("print char\r\n"), 1000);
}
osDelay(1);
......@@ -213,24 +203,6 @@ void StartUartTask(void *argument)
/* USER CODE END StartUartTask */
}
/* USER CODE BEGIN Header_StartCoreTask */
/**
* @brief Function implementing the CoreTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartCoreTask */
void StartCoreTask(void *argument)
{
/* USER CODE BEGIN StartCoreTask */
/* Infinite loop */
for(;;)
{
osDelay(1);
}
/* USER CODE END StartCoreTask */
}
/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */
......
......@@ -93,7 +93,7 @@ int main(void)
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
// 使能UART1中断
// 使能UART2中断
HAL_UART_Receive_IT(&huart2, (uint8_t*)aRxBuffer, RXBUFFERSIZE);
/* USER CODE END 2 */
......
......@@ -197,7 +197,7 @@ void _sys_exit(int x)
*/
int fputc(int ch, FILE *f)
{
while ((USART1->ISR & 0X40) == 0); // 循环发
while ((USART1->ISR & 0X40) == 0); // 循环发??
USART1->RDR = (uint8_t) ch;
return ch;
}
......@@ -209,16 +209,16 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART2) // 串口1
{
if ((USART_RX_STA & 0x8000) == 0) // 接收未完?
if ((USART_RX_STA & 0x8000) == 0) // 接收未完??
{
if (USART_RX_STA & 0x4000) // 接收到了0x0D
{
if (aRxBuffer[0] != 0x0a)
USART_RX_STA = 0; // 接收错误,重新接?
USART_RX_STA = 0; // 接收错误,重新接??
else
USART_RX_STA |= 0x8000; // 接收完成
}
else // 还没接收?0x0D
else // 还没接收??0x0D
{
if (aRxBuffer[0] == 0x0d)
{
......@@ -230,7 +230,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
USART_RX_STA++;
if (USART_RX_STA > (USART_REC_LEN-1))
{
USART_RX_STA = 0; // 接收错误,重新开始接?
USART_RX_STA = 0; // 接收错误,重新开始接??
}
}
}
......
#MicroXplorer Configuration settings - do not modify
FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,FootprintOK,configTOTAL_HEAP_SIZE
FREERTOS.Tasks01=LEDTask,24,128,StartLEDTask,Default,NULL,Dynamic,NULL,NULL;KeyScanTask,24,128,StartKeyScanTask,Default,NULL,Dynamic,NULL,NULL;UartTask,24,128,StartUartTask,Default,NULL,Dynamic,NULL,NULL;CoreTask,8,128,StartCoreTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configTOTAL_HEAP_SIZE=2560
FREERTOS.Tasks01=LEDTask,24,128,StartLEDTask,Default,NULL,Dynamic,NULL,NULL;KeyScanTask,24,128,StartKeyScanTask,Default,NULL,Dynamic,NULL,NULL;UartTask,24,128,StartUartTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configTOTAL_HEAP_SIZE=2048
File.Version=6
KeepUserPlacement=false
Mcu.Family=STM32F0
......