Initial commit.

Signed-off-by: Yilin Sun <imi415@imi.moe>
This commit is contained in:
Yilin Sun 2023-11-17 10:12:42 +08:00
parent 931a8b4b2e
commit 433dee949b
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
10 changed files with 156 additions and 17 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.10)
project(air001_template)
project(air001_bpc)
enable_language(CXX)
enable_language(ASM)
@ -56,6 +56,7 @@ set(TARGET_SOURCES
"board/board.c"
"src/py32f0xx_hal_msp.c"
"src/py32f0xx_it.c"
"src/app_bpc.c"
"src/app_syscalls.c"
"src/main.c"
)

1
SDK Submodule

@ -0,0 +1 @@
Subproject commit 7e27dee1d5e90ea6f1316a7df4d72fc9fc280059

View File

@ -3,14 +3,32 @@
#include "py32f0xx_hal.h"
void BOARD_InitBootPins(void) {
BOARD_InitLEDPins();
BOARD_InitBPCPins();
}
void BOARD_InitLEDPins(void) {
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef init = {
.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3,
.Pin = BOARD_LED_1_PIN | BOARD_LED_2_PIN | BOARD_LED_3_PIN,
.Mode = GPIO_MODE_OUTPUT_PP,
.Speed = GPIO_SPEED_FREQ_LOW,
.Pull = GPIO_NOPULL,
};
HAL_GPIO_Init(GPIOB, &init);
HAL_GPIO_Init(BOARD_LED_1_PORT, &init);
}
void BOARD_InitBPCPins(void) {
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef init = {
.Pin = BOARD_BPC_PON_PIN,
.Mode = GPIO_MODE_OUTPUT_OD,
.Speed = GPIO_SPEED_FREQ_LOW,
.Pull = GPIO_NOPULL,
};
HAL_GPIO_Init(BOARD_BPC_PON_PORT, &init);
}

View File

@ -1,14 +1,31 @@
#ifndef BOARD_H
#define BOARD_H
/* ==== LED ==== */
#define BOARD_LED_1_PORT GPIOB
#define BOARD_LED_2_PORT GPIOB
#define BOARD_LED_3_PORT GPIOB
#define BOARD_LED_1_PIN GPIO_PIN_1
#define BOARD_LED_2_PIN GPIO_PIN_0
#define BOARD_LED_3_PIN_GPIO_PIN_3
#define BOARD_LED_3_PIN GPIO_PIN_3
/* ==== UART ==== */
#define BOARD_UART_TX_PORT GPIOA
#define BOARD_UART_RX_PORT GPIOA
#define BOARD_UART_TX_PIN GPIO_PIN_2
#define BOARD_UART_RX_PIN GPIO_PIN_3
/* ==== BPC ==== */
#define BOARD_BPC_PON_PORT GPIOA
#define BOARD_BPC_NTCO_PORT GPIOA
#define BOARD_BPC_PON_PIN GPIO_PIN_7
#define BOARD_BPC_NTCO_PIN GPIO_PIN_4
void BOARD_InitBootPins(void);
void BOARD_InitLEDPins(void);
void BOARD_InitBPCPins(void);
#endif // BOARD_H

View File

@ -1,8 +1,11 @@
#ifndef MAIN_H
#define MAIN_H
#include "board.h"
#include "py32f0xx_hal.h"
extern UART_HandleTypeDef huart1;
extern TIM_HandleTypeDef htim14;
#endif // MAIN_H

View File

@ -44,7 +44,7 @@ extern "C" {
#define HAL_GPIO_MODULE_ENABLED
//#define HAL_IWDG_MODULE_ENABLED
//#define HAL_WWDG_MODULE_ENABLED
//#define HAL_TIM_MODULE_ENABLED
#define HAL_TIM_MODULE_ENABLED
#define HAL_DMA_MODULE_ENABLED
//#define HAL_LPTIM_MODULE_ENABLED
#define HAL_PWR_MODULE_ENABLED

58
src/app_bpc.c Normal file
View File

@ -0,0 +1,58 @@
/* Board */
#include "board.h"
/* App */
#include "main.h"
#define APP_BPC_TIM_CHANNEL TIM_CHANNEL_1
int app_bpc_init(void) {
/* Enable BPC module */
HAL_GPIO_WritePin(BOARD_BPC_PON_PORT, BOARD_BPC_PON_PIN, 0U);
htim14.Instance = TIM14;
htim14.Init.Prescaler = (HAL_RCC_GetPCLK1Freq() / 1000) - 1;
htim14.Init.Period = 2500 - 1;
htim14.Init.RepetitionCounter = 0;
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
if (HAL_TIM_Base_Init(&htim14) != HAL_OK) {
return -1;
}
TIM_IC_InitTypeDef ic_init = {
.ICSelection = TIM_ICSELECTION_DIRECTTI,
.ICPolarity = TIM_ICPOLARITY_BOTHEDGE,
.ICPrescaler = TIM_ICPSC_DIV1,
.ICFilter = 0,
};
if (HAL_TIM_IC_ConfigChannel(&htim14, &ic_init, APP_BPC_TIM_CHANNEL) != HAL_OK) {
return -2;
}
/* Enable reload interrupt, for timeout detection */
__HAL_TIM_ENABLE_IT(&htim14, TIM_IT_UPDATE);
if (HAL_TIM_IC_Start_IT(&htim14, APP_BPC_TIM_CHANNEL) != HAL_OK) {
return -3;
}
return 0;
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM14) {
HAL_GPIO_TogglePin(BOARD_LED_2_PORT, BOARD_LED_2_PIN);
}
}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM14) {
__HAL_TIM_SET_COUNTER(htim, 0U);
HAL_GPIO_TogglePin(BOARD_LED_1_PORT, BOARD_LED_1_PIN);
}
}

View File

@ -7,7 +7,15 @@
#include "app_syscalls.h"
#include "main.h"
#define APP_SAMPLING_MOVING_AVG 100
UART_HandleTypeDef huart1;
TIM_HandleTypeDef htim14;
static uint8_t s_moving_avg[APP_SAMPLING_MOVING_AVG];
static volatile uint8_t s_moving_avg_ptr = 0U;
int app_bpc_init(void);
int main(void) {
HAL_Init();
@ -18,8 +26,11 @@ int main(void) {
printf("Hello world.\r\n");
app_bpc_init();
for (;;) {
HAL_GPIO_TogglePin(BOARD_LED_1_PORT, BOARD_LED_1_PIN);
HAL_Delay(500);
__WFI();
}
}
return 0;
}

View File

@ -38,20 +38,42 @@ void HAL_MspInit(void) {
void HAL_UART_MspInit(UART_HandleTypeDef *huart) {
if (huart == &huart1) {
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitTypeDef GPIO_InitStruct = {
.Pin = BOARD_UART_TX_PIN | BOARD_UART_RX_PIN,
.Mode = GPIO_MODE_AF_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW,
.Alternate = GPIO_AF1_USART1,
};
HAL_GPIO_Init(BOARD_UART_TX_PORT, &GPIO_InitStruct);
HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
__HAL_RCC_USART1_CLK_ENABLE();
HAL_NVIC_SetPriority(USART1_IRQn, 4, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
}
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM14) {
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {
.Pin = BOARD_BPC_NTCO_PIN,
.Mode = GPIO_MODE_AF_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW,
.Alternate = GPIO_AF4_TIM14,
};
HAL_GPIO_Init(BOARD_BPC_NTCO_PORT, &GPIO_InitStruct);
__HAL_RCC_TIM14_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM14_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(TIM14_IRQn);
}
}
/************************ (C) COPYRIGHT Puya *****END OF FILE******************/

View File

@ -89,4 +89,12 @@ void USART1_IRQHandler(void)
HAL_UART_IRQHandler(&huart1);
}
/**
* @brief This function handles TIM14 Interrupt .
*/
void TIM14_IRQHandler(void)
{
HAL_TIM_IRQHandler(&htim14);
}
/************************ (C) COPYRIGHT Puya *****END OF FILE******************/