switching UART2 to DMA-Mode
This commit is contained in:
parent
41469673b6
commit
190493fba4
@ -44,6 +44,7 @@ TIM_HandleTypeDef htim2;
|
|||||||
|
|
||||||
UART_HandleTypeDef huart1;
|
UART_HandleTypeDef huart1;
|
||||||
UART_HandleTypeDef huart2;
|
UART_HandleTypeDef huart2;
|
||||||
|
DMA_HandleTypeDef hdma_usart2_rx;
|
||||||
|
|
||||||
/* USER CODE END ET */
|
/* USER CODE END ET */
|
||||||
|
|
||||||
|
@ -53,7 +53,9 @@ void PendSV_Handler(void);
|
|||||||
void SysTick_Handler(void);
|
void SysTick_Handler(void);
|
||||||
void RTC_IRQHandler(void);
|
void RTC_IRQHandler(void);
|
||||||
void EXTI4_15_IRQHandler(void);
|
void EXTI4_15_IRQHandler(void);
|
||||||
|
void DMA1_Channel4_5_6_7_IRQHandler(void);
|
||||||
void TIM2_IRQHandler(void);
|
void TIM2_IRQHandler(void);
|
||||||
|
void USART2_IRQHandler(void);
|
||||||
/* USER CODE BEGIN EFP */
|
/* USER CODE BEGIN EFP */
|
||||||
|
|
||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
83
src/main.c
83
src/main.c
@ -41,7 +41,9 @@
|
|||||||
/* Private define ------------------------------------------------------------*/
|
/* Private define ------------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PD */
|
/* USER CODE BEGIN PD */
|
||||||
|
|
||||||
#define BUFFER_SIZE 1024
|
#define BUFFER_SIZE 1024
|
||||||
|
#define RxBuf_SIZE 512
|
||||||
|
#define MainBuf_SIZE 1024
|
||||||
|
|
||||||
/* USER CODE END PD */
|
/* USER CODE END PD */
|
||||||
|
|
||||||
@ -52,7 +54,12 @@
|
|||||||
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
char floatBuffer[20];
|
uint8_t RxBuf[RxBuf_SIZE];
|
||||||
|
uint8_t MainBuf[MainBuf_SIZE];
|
||||||
|
|
||||||
|
uint16_t sml_frame_size;
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
@ -61,6 +68,7 @@ static void MX_GPIO_Init(void);
|
|||||||
static void MX_SPI1_Init(void);
|
static void MX_SPI1_Init(void);
|
||||||
static void MX_USART1_UART_Init(void);
|
static void MX_USART1_UART_Init(void);
|
||||||
static void MX_USART2_UART_Init(void);
|
static void MX_USART2_UART_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
static void MX_TIM2_Init(void);
|
static void MX_TIM2_Init(void);
|
||||||
static void MX_RTC_Init(void);
|
static void MX_RTC_Init(void);
|
||||||
/* USER CODE BEGIN PFP */
|
/* USER CODE BEGIN PFP */
|
||||||
@ -70,8 +78,6 @@ static void MX_RTC_Init(void);
|
|||||||
/* Private user code ---------------------------------------------------------*/
|
/* Private user code ---------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
uint8_t sml_frame[BUFFER_SIZE];
|
|
||||||
|
|
||||||
double T1Wh = -2, SumWh = -2;
|
double T1Wh = -2, SumWh = -2;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -275,17 +281,11 @@ static void reportfunc (osjob_t* j) {
|
|||||||
static osjob_t testjob;
|
static osjob_t testjob;
|
||||||
|
|
||||||
static void testfunc( osjob_t *j){
|
static void testfunc( osjob_t *j){
|
||||||
// uint32_t ticks;
|
|
||||||
// ticks = HAL_GetTick();
|
// HAL_UART_Transmit( &huart1, MainBuf, MainBuf_SIZE, HAL_MAX_DELAY );
|
||||||
// debug_str( (const char*)sml_frame );
|
|
||||||
// debug_val("Ticks: ", ticks );
|
for(int i = 0; i < sml_frame_size; i++){
|
||||||
for( int i = 0; i < sizeof(sml_frame); i++ ){
|
readByte( &MainBuf[i] );
|
||||||
sml_frame[i] = 0u;
|
|
||||||
};
|
|
||||||
HAL_UART_Receive( &huart2, sml_frame, 512, 2000 );
|
|
||||||
// HAL_UART_Transmit( &huart1, sml_frame, 512, HAL_MAX_DELAY );
|
|
||||||
for(int i = 0; i < 512; i++){
|
|
||||||
readByte( &sml_frame[i] );
|
|
||||||
};
|
};
|
||||||
// debug_str( "\r\n" );
|
// debug_str( "\r\n" );
|
||||||
|
|
||||||
@ -395,19 +395,13 @@ int main(void)
|
|||||||
/* Configure the system clock */
|
/* Configure the system clock */
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
|
|
||||||
/* Configure SysTick to generate an interrupt every millisecond */
|
|
||||||
// if (SysTick_Config(SystemCoreClock / 1000) != HAL_OK) {
|
|
||||||
// // Error Handling
|
|
||||||
// Error_Handler();
|
|
||||||
// }
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SysInit */
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
/* USER CODE END SysInit */
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
/* Initialize all configured peripherals */
|
/* Initialize all configured peripherals */
|
||||||
MX_GPIO_Init();
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
MX_SPI1_Init();
|
MX_SPI1_Init();
|
||||||
MX_USART1_UART_Init();
|
MX_USART1_UART_Init();
|
||||||
MX_USART2_UART_Init();
|
MX_USART2_UART_Init();
|
||||||
@ -415,6 +409,9 @@ int main(void)
|
|||||||
MX_RTC_Init();
|
MX_RTC_Init();
|
||||||
|
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RxBuf, RxBuf_SIZE);
|
||||||
|
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
|
||||||
|
|
||||||
HAL_TIM_Base_Start_IT(&htim2); // <----------- change to your setup
|
HAL_TIM_Base_Start_IT(&htim2); // <----------- change to your setup
|
||||||
__HAL_SPI_ENABLE(&hspi1); // <----------- change to your setup
|
__HAL_SPI_ENABLE(&hspi1); // <----------- change to your setup
|
||||||
|
|
||||||
@ -735,9 +732,7 @@ static void MX_USART2_UART_Init(void)
|
|||||||
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||||
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
|
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||||
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||||
huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT|UART_ADVFEATURE_DMADISABLEONERROR_INIT;
|
huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||||
huart2.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
|
|
||||||
huart2.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
|
|
||||||
if (HAL_UART_Init(&huart2) != HAL_OK)
|
if (HAL_UART_Init(&huart2) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
@ -748,6 +743,22 @@ static void MX_USART2_UART_Init(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable DMA controller clock
|
||||||
|
*/
|
||||||
|
static void MX_DMA_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* DMA controller clock enable */
|
||||||
|
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||||
|
|
||||||
|
/* DMA interrupt init */
|
||||||
|
/* DMA1_Channel4_5_6_7_IRQn interrupt configuration */
|
||||||
|
HAL_NVIC_SetPriority(DMA1_Channel4_5_6_7_IRQn, 0, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(DMA1_Channel4_5_6_7_IRQn);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief GPIO Initialization Function
|
* @brief GPIO Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
@ -804,7 +815,7 @@ void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) {
|
|||||||
HAL_RTC_GetAlarm(hrtc,&sAlarm,RTC_ALARM_A,FORMAT_BIN);
|
HAL_RTC_GetAlarm(hrtc,&sAlarm,RTC_ALARM_A,FORMAT_BIN);
|
||||||
|
|
||||||
uint8_t next_minutes = sAlarm.AlarmTime.Minutes + 5;
|
uint8_t next_minutes = sAlarm.AlarmTime.Minutes + 5;
|
||||||
if (next_minutes > 56) next_minutes = 0;
|
if (next_minutes >= 56) next_minutes = 0;
|
||||||
|
|
||||||
|
|
||||||
sAlarm.AlarmTime.Minutes = next_minutes;
|
sAlarm.AlarmTime.Minutes = next_minutes;
|
||||||
@ -814,6 +825,26 @@ void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (huart->Instance == USART2)
|
||||||
|
{
|
||||||
|
memset(MainBuf,0x00u, MainBuf_SIZE );
|
||||||
|
|
||||||
|
memcpy(MainBuf, RxBuf, Size );
|
||||||
|
sml_frame_size = Size;
|
||||||
|
|
||||||
|
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RxBuf, RxBuf_SIZE);
|
||||||
|
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) {
|
// void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) {
|
||||||
// RTC_TimeTypeDef sTime;
|
// RTC_TimeTypeDef sTime;
|
||||||
// RTC_DateTypeDef sDate;
|
// RTC_DateTypeDef sDate;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
extern DMA_HandleTypeDef hdma_usart2_rx;
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN TD */
|
/* USER CODE BEGIN TD */
|
||||||
@ -304,20 +305,34 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
|||||||
PA2 ------> USART2_TX
|
PA2 ------> USART2_TX
|
||||||
PA3 ------> USART2_RX
|
PA3 ------> USART2_RX
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = USART2_TX_Pin;
|
GPIO_InitStruct.Pin = USART2_TX_Pin|USART2_RX_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
|
|
||||||
HAL_GPIO_Init(USART2_TX_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = USART2_RX_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
|
GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
|
||||||
HAL_GPIO_Init(USART2_RX_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USART2 DMA Init */
|
||||||
|
/* USART2_RX Init */
|
||||||
|
hdma_usart2_rx.Instance = DMA1_Channel5;
|
||||||
|
hdma_usart2_rx.Init.Request = DMA_REQUEST_4;
|
||||||
|
hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||||
|
hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||||
|
hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
|
||||||
|
hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||||
|
hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||||
|
hdma_usart2_rx.Init.Mode = DMA_NORMAL;
|
||||||
|
hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
|
if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_LINKDMA(huart,hdmarx,hdma_usart2_rx);
|
||||||
|
|
||||||
|
/* USART2 interrupt Init */
|
||||||
|
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
||||||
/* USER CODE BEGIN USART2_MspInit 1 */
|
/* USER CODE BEGIN USART2_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END USART2_MspInit 1 */
|
/* USER CODE END USART2_MspInit 1 */
|
||||||
@ -365,6 +380,11 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOA, USART2_TX_Pin|USART2_RX_Pin);
|
HAL_GPIO_DeInit(GPIOA, USART2_TX_Pin|USART2_RX_Pin);
|
||||||
|
|
||||||
|
/* USART2 DMA DeInit */
|
||||||
|
HAL_DMA_DeInit(huart->hdmarx);
|
||||||
|
|
||||||
|
/* USART2 interrupt DeInit */
|
||||||
|
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||||
/* USER CODE BEGIN USART2_MspDeInit 1 */
|
/* USER CODE BEGIN USART2_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END USART2_MspDeInit 1 */
|
/* USER CODE END USART2_MspDeInit 1 */
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
/* External variables --------------------------------------------------------*/
|
/* External variables --------------------------------------------------------*/
|
||||||
extern RTC_HandleTypeDef hrtc;
|
extern RTC_HandleTypeDef hrtc;
|
||||||
extern TIM_HandleTypeDef htim2;
|
extern TIM_HandleTypeDef htim2;
|
||||||
|
extern DMA_HandleTypeDef hdma_usart2_rx;
|
||||||
|
extern UART_HandleTypeDef huart2;
|
||||||
/* USER CODE BEGIN EV */
|
/* USER CODE BEGIN EV */
|
||||||
|
|
||||||
/* USER CODE END EV */
|
/* USER CODE END EV */
|
||||||
@ -171,6 +173,20 @@ void EXTI4_15_IRQHandler(void)
|
|||||||
/* USER CODE END EXTI4_15_IRQn 1 */
|
/* USER CODE END EXTI4_15_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles DMA1 channel 4, channel 5, channel 6 and channel 7 interrupts.
|
||||||
|
*/
|
||||||
|
void DMA1_Channel4_5_6_7_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN DMA1_Channel4_5_6_7_IRQn 0 */
|
||||||
|
|
||||||
|
/* USER CODE END DMA1_Channel4_5_6_7_IRQn 0 */
|
||||||
|
HAL_DMA_IRQHandler(&hdma_usart2_rx);
|
||||||
|
/* USER CODE BEGIN DMA1_Channel4_5_6_7_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END DMA1_Channel4_5_6_7_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles TIM2 global interrupt.
|
* @brief This function handles TIM2 global interrupt.
|
||||||
*/
|
*/
|
||||||
@ -185,6 +201,20 @@ void TIM2_IRQHandler(void)
|
|||||||
/* USER CODE END TIM2_IRQn 1 */
|
/* USER CODE END TIM2_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles USART2 global interrupt / USART2 wake-up interrupt through EXTI line 26.
|
||||||
|
*/
|
||||||
|
void USART2_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN USART2_IRQn 0 */
|
||||||
|
|
||||||
|
/* USER CODE END USART2_IRQn 0 */
|
||||||
|
HAL_UART_IRQHandler(&huart2);
|
||||||
|
/* USER CODE BEGIN USART2_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END USART2_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
Loading…
Reference in New Issue
Block a user