stm32

使用CMake来构建STM32工程

你。 提交于 2019-12-17 22:20:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程, 可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual Studio 的 projects/workspaces 。 使用CMake来构建STM32工程,生成不同的构建文件, 如生成Visual Studio或Eclipse的工程文件,再配置好编译环境,我们就可以根据个人喜好选择IDE来开发STM32项目了。 配置toolchain 首先创建/opt/stm32-toolchain目录,所需的工具资源都会放在该目录下。 安装GCC ARM Embedded 配置toolchain的第一步是安装ARM Cortex-M和Cortex-R对应的GCC,包括预编译器、编译器和链接器等一系列工具。 最新版的GCC ARM可以从 launchpad 下载,这里使用的是gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2 下载后解压在/opt/stm32-toolchain/gcc-arm目录下。 安装STM32Cube STM32Cube是一个全面的软件平台,包括了ST产品的每个系列。(STM32CubeF4

STM32的两只狗儿——狗立看门狗

落花浮王杯 提交于 2019-12-17 22:19:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> STM32 狗立看门狗,由专门的低速时钟 (LSI) 驱动,即便是主时钟发生故障它仍能够有效,所以此狗狗可以工作在与主时钟无关的要求下,或者待机模块下等,所以它叫独立看门狗,注意一旦开启此看门狗则只能由 MCU 复位后才清除,让它不再工作。 它的时钟是一个内部 RC 时钟,它会在 30KHZ 到 60KHZ 之间变化,并非是精确的 40KHZ ,而只是一般计算时取 40KHZ 。 狗立看门狗需设置四个寄存器如下: 其中, 预分频寄存器 (IWDG_PR) ,最低三位 PR[2:0](Prescaler divider) 有效,可设置有 8 种不同的计数器时钟预分频因子。 重装载寄存器 (IWDG_RLR) 低 12 位 RL[11:0]: 看门狗计数器重装载值 (Watchdog counter reload value) 有效,用来设置计数器的重装载值。 注意要设置以上两个寄存器的值需满足两个条件,详见如下。 键寄存器 (IWDG_KR) ,用来控制去除 IWDG_PR 和 IWDG_RLR 写保护功能以便正常写值,向此寄存器写入 0x5555 则暂时去除 IWDG_PR 和 IWDG_RLR 的写保护功能才可向两个寄存器中写值。当向此寄存器写入 0xAAAA 则 IWDG_RLR 的值会重装载,防止 MCU

stm32环境搭建

[亡魂溺海] 提交于 2019-12-17 22:13:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> MDK http://www.keil.com/arm/mdk.asp MDK-ARM(Microcontroller Development Kit) 是功能强大和常用的cortex-mx 开发环境。 其包含 µVision4 IDE,最新版本需要根据mcu的系列下载不同的pack包( http://www.keil.com/dd2/Pack/ )以支持特定设备,目前stm32库开发方式有两种,一种是最新的cube方式,另一种是传统的标准库方式,如果使用前者,不需要下载其它东西即可,如果需要stm的标准库开发方式,还需单独下载st官方的标准库。 因为标准库方式之前比较主流,参考资源较多,这里先学习标准库方式。 官方标准固件库 链接 Home 》Embedded Software 》MCUs Embedded Software 》STM32 Embedded Software 或 首页 》 软件 》 微控制器软件 》 STM32微控制器软件 在灰色的导航中选择 STM32 standard peripherals library,然后根据需要的型号进入对应页面,在页面最底部提供软件下载地址(需要输入邮箱) 如何使用标准库 解压下载的标准库压缩包,目录结构如下: ├── _htmresc ├──

STM32F103CBT6外部中断应用笔记

六眼飞鱼酱① 提交于 2019-12-17 21:42:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 测试方式: 主芯片:STM32F103CBT6 PA1/PB2 接键盘按键 PA6/PA4 接 LCD PA1—PA4 PB2---PA6 按键被按下后 LCD 灯亮 实现步骤: - 设置相应时钟 - 设置相应中断 - IO 口初始化 - 把相应的 IO 口设置成中断线并初始化 - 在选择的中断通道的响应函数中中断函数 设置相应时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE); 设置相应中断 NVIC_InitTypeDef exti_nvic; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); exti_nvic.NVIC_IRQChannel=EXTI1_IRQn; // 选择中断线,中断线必须与中断 IO 脚对应, // 如果 P1 作为中断脚就必须使用 EXTI1_IRQn ,如果 P2 作为中断脚就必须使用 EXTI2_IRQn exti_nvic.NVIC_IRQChannelPreemptionPriority=1; exti_nvic.NVIC_IRQChannelSubPriority =1;

STM32 STOP模式的应用

感情迁移 提交于 2019-12-17 21:42:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 折腾了一天,静下来把整个过程理理。 本次软件运行ARM-Context3架构STM32F103XXX 项目需求:系统在某个条件下进入省电模式,可以通过外部信号唤醒:一、外部震动传感器,一、串口 当前也有省电模式,但直接进入了待机省电模式,在该模式下只能通过震动传感器唤醒,无法通过串口唤醒。要同时满足震动传感器以及串口唤醒,在现有方案上有两种方式: -、将串口的发送信号(ARM的接收)通过电子开关接到外部震动传感器的输入端 -、省电模式改成串口可唤醒的停机模式 第一种方式硬件改动比较大,第二种方式则只需要修改软件。决定:升级软件 停机模式(STOP) 有两种方式进入STOP,-、中断唤醒方式 -、事件唤醒方式,根据需求采用方式一 退出STOP时直接从进入STOP的下一条指令开始运行,SRAM中的数据保留 进入STOP 首先需要设置好外部中断,这里有两个外部中断,代码如下: EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig

How to get time intervals on STM32?

痞子三分冷 提交于 2019-12-17 19:54:29
问题 I want to measure how long does a single function take on STM32. The only thing I could find is SysTick_Handler . However, that is an periodic interrupt, but what I need is get time interval like: long t1 = mcu_clock(); sleep(20); long t2 = mcu_clock(); long diff = (t2 - t1); I've tried C clock() , but it didn't work and always return -1 . How can I make it? 回答1: First, enable the cycle counter once at startup: CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; DWT->CYCCNT = 0; DWT->CTRL |= DWT

Which variable types/sizes are atomic on STM32 microcontrollers?

一个人想着一个人 提交于 2019-12-17 19:27:48
问题 Here are the data types on STM32 microcontrollers: http://www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm. These microcontrollers use 32-bit ARM core processors. Which data types have automatic atomic read and atomic write access? I'm pretty sure all 32-bit data types do (since the processor is 32-bits), and all 64-bit data types do NOT (since it would take at least 2 processor operations to read or write a 64-bit word), but what about bool (1 byte), and uint16_t / int16_t (2

Allocating memory in Flash for user data (STM32F4 HAL)

心不动则不痛 提交于 2019-12-17 15:35:52
问题 I'm trying to use the internal flash of an STM32F405 to store a bunch of user settable bytes that remain after rebooting. I'm using: uint8_t userConfig[64] __attribute__((at(0x0800C000))); to allocate memory for the data I want to store. When the program starts, I check to see if the first byte is set to 0x42 , if not, i set it using: HAL_FLASH_Unlock(); HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42); HAL_FLASH_Lock(); After that I check the value in userConfig[0] and I see 0x42 ..

STM32启动过程简图

早过忘川 提交于 2019-12-16 19:57:34
STM32启动过程简图 以STM32F407为例,用一个简图介绍STM32的启动过程。如下: 对应的启动文件startup_stm32f40_41xxx.s的代码如下: ;******************** (C) COPYRIGHT 2013 STMicroelectronics ******************** ;* File Name : startup_stm32f40_41xxx.s ;* Author : MCD Application Team ;* Version : V1.2.1 ;* Date : 19-September-2013 ;* Description : STM32F40xxx/41xxx devices vector table for MDK-ARM toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the system clock and the external SRAM mounted on ;* STM324xG

stm32 HAL库函数——GPIO

断了今生、忘了曾经 提交于 2019-12-16 13:05:34
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); 以上内容复制自stm32f7xx_hal_gpio.h 初始化HAL库 HAL_Init(); 初始化时钟(正点原子系统文件夹里得函数)