开发板搭载STM32U083基于Arm Cortex -M0+内核的微控制器,具有256Kbytes闪存和40Kbytes SRAM.,主频可达56M。
超低功耗功能(超低功耗设备)
•1.71 V至3.6 V电源
•-40°C至85/125°C温度范围
•VBAT模式:130 nA(带RTC和9 x 32位备份寄存器)
•关闭模式(6个唤醒引脚):16 nA
•待机模式(6个唤醒引脚):160 nA带RTC,30 nA不带RTC
•停止2模式:带RTC的825 nA,不带RTC的695 nA
•运行模式(LDO模式):52μA/MHz
•批量采集模式(BAM)
•从停止模式唤醒4μs
•断电复位(BOR)
在 STM32单片机有6个重要的时钟源,为 HSI、 HSE、 LSI、 LSE、 MSI、 PLL。其中PLL 实际是分为三个时钟源,分别为主 PLL 和PLLISAI1 和 PLLSAI2。从时钟频率来分可以分为高速时钟源和低速时钟源,在这 6个中 :HSI, HSE, MSI 以及 PLL 是高速时钟,LSI和LSE 是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中HSE和LSE是外部时钟源,其他的是内部时钟源。
① LSI 是低速内部时钟, RC 振荡器,频率为 32kHz 左右。供独立看门狗、 RTC 和 LCD使用。
② LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。
③ HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz-48MHz。我们的开发板接的是 8MHz 的晶振。 HSE 也可以直接做为系统时钟或者 PLL 输入。
④ HSI 是高速内部时钟, RC 振荡器, 频率为 16MHz。可以直接作为系统时钟或者用作PLL 输入。
⑤ MSI 时钟信号由内部 RC 振荡器产生。其频率范围可通过时钟控制寄存器(RCC_CR)中的 MSIRANGE[3:0]位进行调整。
⑥ PLL 为锁相环倍频输出。
U83功能系统:
U083系统时钟源:两个不同的源可以提供SYSCLK系统时钟:4-48 MHz高速振荡器,带外部晶体或陶瓷谐振器(HSE)。它可以提供时钟到系统PLL。HSE也可以配置为外部时钟的旁路模式。16 MHz高速内部RC振荡器(HSI16),可通过软件进行微调。它可以为提供时钟
系统PLL。多速内部RC振荡器(MSI),可通过软件进行微调,能够生成12个频率形式100kHz至48MHz。当系统(LSE)中有32.768 kHz时钟源可用时,MSI频率可以通过硬件自动调整,达到优于±0.25%的精度。这个MSI可以提供PLL。系统PLL,可由HSE、HSI16或MSI供电。它提供高达56 MHz的系统时钟。
开发板通过SB27获得STLINK始终,SB27是断开的。晶振没有焊接,用MSI内部时钟。
配置:
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure the main internal regulator output voltage
*/
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
Error_Handler();
}
}
main()
int main(void)
{
/* USER CODE BEGIN 1 */
/* STM32U0xx HAL library initialization:
- Configure the Flash prefetch
- Systick timer is configured by default as source of time base, but user
can eventually implement his proper time base source (a general purpose
timer for example or other time source), keeping in mind that Time base
duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
handled in milliseconds basis.
- Low Level Initialization
*/
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
/* -1- Enable GPIO Clock (to be able to program the configuration registers) */
LED4_GPIO_CLK_ENABLE();
/* -2- Configure IO in output push-pull mode to drive external LEDs */
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = LED4_PIN;
HAL_GPIO_Init(LED4_GPIO_PORT, &GPIO_InitStruct);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LED4_GPIO_PORT, LED4_PIN);
/* Insert delay 100 ms */
HAL_Delay(1000);
}
/* USER CODE END 3 */
}
|