fc1b0482 by 张亚玄

fix uart

1 parent 739e197c
...@@ -59,8 +59,8 @@ ...@@ -59,8 +59,8 @@
59 #define configCPU_CLOCK_HZ ( SystemCoreClock ) 59 #define configCPU_CLOCK_HZ ( SystemCoreClock )
60 #define configTICK_RATE_HZ ((TickType_t)1000) 60 #define configTICK_RATE_HZ ((TickType_t)1000)
61 #define configMAX_PRIORITIES ( 56 ) 61 #define configMAX_PRIORITIES ( 56 )
62 #define configMINIMAL_STACK_SIZE ((uint16_t)64) 62 #define configMINIMAL_STACK_SIZE ((uint16_t)128)
63 #define configTOTAL_HEAP_SIZE ((size_t)2560) 63 #define configTOTAL_HEAP_SIZE ((size_t)2048)
64 #define configMAX_TASK_NAME_LEN ( 16 ) 64 #define configMAX_TASK_NAME_LEN ( 16 )
65 #define configUSE_TRACE_FACILITY 1 65 #define configUSE_TRACE_FACILITY 1
66 #define configUSE_16_BIT_TICKS 0 66 #define configUSE_16_BIT_TICKS 0
......
...@@ -27,10 +27,10 @@ ...@@ -27,10 +27,10 @@
27 #include "main.h" 27 #include "main.h"
28 28
29 /* USER CODE BEGIN Includes */ 29 /* USER CODE BEGIN Includes */
30 #define USART_REC_LEN 200 // 大接收字节数 30 #define USART_REC_LEN 200 // æœ?大接收字节数
31 31
32 extern uint8_t USART_RX_BUF[USART_REC_LEN]; // 接收缓冲,最大USART_REC_LEN个字节,末字节为æ¢è¡Œ 32 extern uint8_t USART_RX_BUF[USART_REC_LEN]; // 接收缓冲,最大USART_REC_LEN个字节,末字节为æ¢è¡Œ
33 extern uint16_t USART_RX_STA; // 接收状 33 extern uint16_t USART_RX_STA; // 接收状æ??
34 34
35 #define RXBUFFERSIZE 1 // ç¼“å­˜å¤§å° 35 #define RXBUFFERSIZE 1 // 缓存大å°
36 extern uint8_t aRxBuffer[RXBUFFERSIZE]; // HAL库USART接收Buffer 36 extern uint8_t aRxBuffer[RXBUFFERSIZE]; // HAL库USART接收Buffer
......
...@@ -50,7 +50,6 @@ ...@@ -50,7 +50,6 @@
50 osThreadId_t LEDTaskHandle; 50 osThreadId_t LEDTaskHandle;
51 osThreadId_t KeyScanTaskHandle; 51 osThreadId_t KeyScanTaskHandle;
52 osThreadId_t UartTaskHandle; 52 osThreadId_t UartTaskHandle;
53 osThreadId_t CoreTaskHandle;
54 53
55 /* Private function prototypes -----------------------------------------------*/ 54 /* Private function prototypes -----------------------------------------------*/
56 /* USER CODE BEGIN FunctionPrototypes */ 55 /* USER CODE BEGIN FunctionPrototypes */
...@@ -60,7 +59,6 @@ osThreadId_t CoreTaskHandle; ...@@ -60,7 +59,6 @@ osThreadId_t CoreTaskHandle;
60 void StartLEDTask(void *argument); 59 void StartLEDTask(void *argument);
61 void StartKeyScanTask(void *argument); 60 void StartKeyScanTask(void *argument);
62 void StartUartTask(void *argument); 61 void StartUartTask(void *argument);
63 void StartCoreTask(void *argument);
64 62
65 void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ 63 void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
66 64
...@@ -96,7 +94,7 @@ osKernelInitialize(); ...@@ -96,7 +94,7 @@ osKernelInitialize();
96 const osThreadAttr_t LEDTask_attributes = { 94 const osThreadAttr_t LEDTask_attributes = {
97 .name = "LEDTask", 95 .name = "LEDTask",
98 .priority = (osPriority_t) osPriorityNormal, 96 .priority = (osPriority_t) osPriorityNormal,
99 .stack_size = 64 97 .stack_size = 128
100 }; 98 };
101 LEDTaskHandle = osThreadNew(StartLEDTask, NULL, &LEDTask_attributes); 99 LEDTaskHandle = osThreadNew(StartLEDTask, NULL, &LEDTask_attributes);
102 100
...@@ -104,7 +102,7 @@ osKernelInitialize(); ...@@ -104,7 +102,7 @@ osKernelInitialize();
104 const osThreadAttr_t KeyScanTask_attributes = { 102 const osThreadAttr_t KeyScanTask_attributes = {
105 .name = "KeyScanTask", 103 .name = "KeyScanTask",
106 .priority = (osPriority_t) osPriorityNormal, 104 .priority = (osPriority_t) osPriorityNormal,
107 .stack_size = 64 105 .stack_size = 128
108 }; 106 };
109 KeyScanTaskHandle = osThreadNew(StartKeyScanTask, NULL, &KeyScanTask_attributes); 107 KeyScanTaskHandle = osThreadNew(StartKeyScanTask, NULL, &KeyScanTask_attributes);
110 108
...@@ -116,14 +114,6 @@ osKernelInitialize(); ...@@ -116,14 +114,6 @@ osKernelInitialize();
116 }; 114 };
117 UartTaskHandle = osThreadNew(StartUartTask, NULL, &UartTask_attributes); 115 UartTaskHandle = osThreadNew(StartUartTask, NULL, &UartTask_attributes);
118 116
119 /* definition and creation of CoreTask */
120 const osThreadAttr_t CoreTask_attributes = {
121 .name = "CoreTask",
122 .priority = (osPriority_t) osPriorityLow,
123 .stack_size = 128
124 };
125 CoreTaskHandle = osThreadNew(StartCoreTask, NULL, &CoreTask_attributes);
126
127 /* USER CODE BEGIN RTOS_THREADS */ 117 /* USER CODE BEGIN RTOS_THREADS */
128 /* add threads, ... */ 118 /* add threads, ... */
129 /* USER CODE END RTOS_THREADS */ 119 /* USER CODE END RTOS_THREADS */
...@@ -191,10 +181,10 @@ void StartUartTask(void *argument) ...@@ -191,10 +181,10 @@ void StartUartTask(void *argument)
191 if (USART_RX_STA & 0x8000) 181 if (USART_RX_STA & 0x8000)
192 { 182 {
193 len = USART_RX_STA & 0x3fff; // 获取接收到的数据长度 183 len = USART_RX_STA & 0x3fff; // 获取接收到的数据长度
194 printf("\r\n接收到的数据:\r\n"); 184 HAL_UART_Transmit(&huart1, (uint8_t*)"\r\nReceived:\r\n", sizeof("\r\nReceived:\r\n"), 1000);
195 HAL_UART_Transmit(&huart1, (uint8_t*)USART_RX_BUF, len, 1000); 185 HAL_UART_Transmit(&huart1, (uint8_t*)USART_RX_BUF, len, 1000);
196 while (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != SET); 186 while (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != SET);
197 printf("\r\n\r\n"); // 插入换行 187 HAL_UART_Transmit(&huart1, (uint8_t*)"\r\n\r\n", sizeof("\r\n\r\n"), 1000);
198 USART_RX_STA=0; 188 USART_RX_STA=0;
199 } 189 }
200 else 190 else
...@@ -202,10 +192,10 @@ void StartUartTask(void *argument) ...@@ -202,10 +192,10 @@ void StartUartTask(void *argument)
202 times++; 192 times++;
203 if (times % 5000 == 0) 193 if (times % 5000 == 0)
204 { 194 {
205 printf("\r\n串口实验\r\n"); 195 HAL_UART_Transmit(&huart1, (uint8_t*)"\r\nUART Test\r\n", sizeof("\r\nUART Test\r\n"), 1000);
206 } 196 }
207 if (times % 200 == 0) 197 if (times % 1000 == 0)
208 printf("请输入数据,以回车键结束\r\n"); 198 HAL_UART_Transmit(&huart1, (uint8_t*)"print char\r\n", sizeof("print char\r\n"), 1000);
209 } 199 }
210 200
211 osDelay(1); 201 osDelay(1);
...@@ -213,24 +203,6 @@ void StartUartTask(void *argument) ...@@ -213,24 +203,6 @@ void StartUartTask(void *argument)
213 /* USER CODE END StartUartTask */ 203 /* USER CODE END StartUartTask */
214 } 204 }
215 205
216 /* USER CODE BEGIN Header_StartCoreTask */
217 /**
218 * @brief Function implementing the CoreTask thread.
219 * @param argument: Not used
220 * @retval None
221 */
222 /* USER CODE END Header_StartCoreTask */
223 void StartCoreTask(void *argument)
224 {
225 /* USER CODE BEGIN StartCoreTask */
226 /* Infinite loop */
227 for(;;)
228 {
229 osDelay(1);
230 }
231 /* USER CODE END StartCoreTask */
232 }
233
234 /* Private application code --------------------------------------------------*/ 206 /* Private application code --------------------------------------------------*/
235 /* USER CODE BEGIN Application */ 207 /* USER CODE BEGIN Application */
236 208
......
...@@ -93,7 +93,7 @@ int main(void) ...@@ -93,7 +93,7 @@ int main(void)
93 MX_USART1_UART_Init(); 93 MX_USART1_UART_Init();
94 MX_USART2_UART_Init(); 94 MX_USART2_UART_Init();
95 /* USER CODE BEGIN 2 */ 95 /* USER CODE BEGIN 2 */
96 // 使能UART1中断 96 // 使能UART2中断
97 HAL_UART_Receive_IT(&huart2, (uint8_t*)aRxBuffer, RXBUFFERSIZE); 97 HAL_UART_Receive_IT(&huart2, (uint8_t*)aRxBuffer, RXBUFFERSIZE);
98 /* USER CODE END 2 */ 98 /* USER CODE END 2 */
99 99
......
...@@ -197,7 +197,7 @@ void _sys_exit(int x) ...@@ -197,7 +197,7 @@ void _sys_exit(int x)
197 */ 197 */
198 int fputc(int ch, FILE *f) 198 int fputc(int ch, FILE *f)
199 { 199 {
200 while ((USART1->ISR & 0X40) == 0); // 循环发 200 while ((USART1->ISR & 0X40) == 0); // 循环发??
201 USART1->RDR = (uint8_t) ch; 201 USART1->RDR = (uint8_t) ch;
202 return ch; 202 return ch;
203 } 203 }
...@@ -209,16 +209,16 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) ...@@ -209,16 +209,16 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
209 { 209 {
210 if (huart->Instance == USART2) // 串口1 210 if (huart->Instance == USART2) // 串口1
211 { 211 {
212 if ((USART_RX_STA & 0x8000) == 0) // 接收未完? 212 if ((USART_RX_STA & 0x8000) == 0) // 接收未完??
213 { 213 {
214 if (USART_RX_STA & 0x4000) // 接收到了0x0D 214 if (USART_RX_STA & 0x4000) // 接收到了0x0D
215 { 215 {
216 if (aRxBuffer[0] != 0x0a) 216 if (aRxBuffer[0] != 0x0a)
217 USART_RX_STA = 0; // 接收错误,重新接? 217 USART_RX_STA = 0; // 接收错误,重新接??
218 else 218 else
219 USART_RX_STA |= 0x8000; // 接收完成 219 USART_RX_STA |= 0x8000; // 接收完成
220 } 220 }
221 else // 还没接收?0x0D 221 else // 还没接收??0x0D
222 { 222 {
223 if (aRxBuffer[0] == 0x0d) 223 if (aRxBuffer[0] == 0x0d)
224 { 224 {
...@@ -230,7 +230,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) ...@@ -230,7 +230,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
230 USART_RX_STA++; 230 USART_RX_STA++;
231 if (USART_RX_STA > (USART_REC_LEN-1)) 231 if (USART_RX_STA > (USART_REC_LEN-1))
232 { 232 {
233 USART_RX_STA = 0; // 接收错误,重新开始接? 233 USART_RX_STA = 0; // 接收错误,重新开始接??
234 } 234 }
235 } 235 }
236 } 236 }
......
1 #MicroXplorer Configuration settings - do not modify 1 #MicroXplorer Configuration settings - do not modify
2 FREERTOS.FootprintOK=true 2 FREERTOS.FootprintOK=true
3 FREERTOS.IPParameters=Tasks01,FootprintOK,configTOTAL_HEAP_SIZE 3 FREERTOS.IPParameters=Tasks01,FootprintOK,configTOTAL_HEAP_SIZE
4 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 4 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
5 FREERTOS.configTOTAL_HEAP_SIZE=2560 5 FREERTOS.configTOTAL_HEAP_SIZE=2048
6 File.Version=6 6 File.Version=6
7 KeepUserPlacement=false 7 KeepUserPlacement=false
8 Mcu.Family=STM32F0 8 Mcu.Family=STM32F0
......