Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
张亚玄
/
STM32Test
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
fc1b0482
authored
2019-10-29 23:24:13 +0800
by
张亚玄
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
fix uart
1 parent
739e197c
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
19 additions
and
47 deletions
Core/Inc/FreeRTOSConfig.h
Core/Inc/usart.h
Core/Src/freertos.c
Core/Src/main.c
Core/Src/usart.c
STM32Test.ioc
Core/Inc/FreeRTOSConfig.h
View file @
fc1b048
...
...
@@ -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)2
560
)
#define configMINIMAL_STACK_SIZE ((uint16_t)
128
)
#define configTOTAL_HEAP_SIZE ((size_t)2
048
)
#define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0
...
...
Core/Inc/usart.h
View file @
fc1b048
...
...
@@ -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
...
...
Core/Src/freertos.c
View file @
fc1b048
...
...
@@ -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\n
Received:
\r\n
"
,
sizeof
(
"
\r\n
Received:
\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\n
UART Test
\r\n
"
,
sizeof
(
"
\r\n
UART Test
\r\n
"
),
1000
);
}
if
(
times
%
2
00
==
0
)
printf
(
"请输入数据,以回车键结束
\r\n
"
);
if
(
times
%
10
00
==
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 */
...
...
Core/Src/main.c
View file @
fc1b048
...
...
@@ -93,7 +93,7 @@ int main(void)
MX_USART1_UART_Init
();
MX_USART2_UART_Init
();
/* USER CODE BEGIN 2 */
// 使能UART
1
中断
// 使能UART
2
中断
HAL_UART_Receive_IT
(
&
huart2
,
(
uint8_t
*
)
aRxBuffer
,
RXBUFFERSIZE
);
/* USER CODE END 2 */
...
...
Core/Src/usart.c
View file @
fc1b048
...
...
@@ -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
;
// 接收错误,重新开始接
?
?
}
}
}
...
...
STM32Test.ioc
View file @
fc1b048
#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=2
560
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=2
048
File.Version=6
KeepUserPlacement=false
Mcu.Family=STM32F0
...
...
Please
register
or
sign in
to post a comment