解析stm32内部的存储原理
编译——汇编——链接 编译:c源码变为汇编语言*.s的过程 汇编:汇编语言变为机器语言*.o的过程 链接:多个.o文件按顺序合并成一个可执行文件 对于一个c语言程序,其内存主要分为、代码段(存放程序执行代码)、数据段(已被初始化的全局变量或静态变量)、静态区(隐式初始化的全局变量或静态变量)、栈stack(编译器分配的)、堆heap(程序员分配,不连续,自由空间更多)
单片机上通常由ROM和RAM STM32上的Flash 就是它的ROM 从0x0800 0000开始 结束地址再加上它的容量 Flash内部存储程序代码和const类型变量 SRAM则存储运行时的变量,掉电丢失 FLASH 包含主存储器(代码和const)、系统存储器(厂家配置的串口,usb烧录等程序)、 OTP 区域(flash控制寄存器区)以及选项字节区 为了使用Flash内部巨大的空间,可以看编译生成的map文件来确认flash的使用情况进而写入flash内数据 HAL_FLASHEx_Erase(Flash_EraseInitTypedef* ,SectorErros*存储flash擦除错误时的页面号) HAL_FLASH_Program(选择写入的数据格式(8/16/32), 地址,数据) Flash中读数据就用memcpy(放地址,取地址,几个8位) HAL_FLASH_Unlock为flash写数据或者擦除时都要为flash解锁 HAL_FLASH_Lock
STM32HAL库的API简记
HAL_GPIO_WritePin 写电平HAL_GPIO_ReadPin读电平 HAL_GetTick获得当前时刻tick值 HAL_Delay HAL_GPIO_TogglePin电平反转
定时器开启(无中断):HAL_TIM_Base_Start 有IT后缀的是有中断的函数 aRGB 是透明度加三原色,透明度越大越不透明 _HAL_TIM_PWM_Start开始输出PWM _HAL_TIM_Setcompare(句柄,通道,值)修改CCRX比较寄存器的值
ADC_ChannelConfTypeDef 先用它对ADC的各个结构体赋值 HAL_ADC_ConfigChannel来为ADC设置各个通道值 HAL_ADC_Start开启ADC转换 HAL_ADC_PollForConversion等待ADC转换结束 最后参数为最大等待时间 HAL_ADC_GetValue 获取ADC值
HAL_UART_ENABLE_IT使能串口功能,含中断 HAL_UART_TxCpltCallback为其发送中断回调函数
HAL_DMA_ENABLE
HAL_I2C_Mem_Read(句柄、从机地址、寄存器地址、寄存器地址增加大小(8/16),数据指针、数据长度、超时时间) HAL_I2C_Mem_Write参数相同
如果要使用HAL的SPI的API的话,如果要使用DMA,那么在全双工模式时,同时使用DMA的API,是默认需要tx和rx都使用,且二者发送接收数据长度相同的这就可能会导致一些数据读错,此外,在, HAL_SPI_TransmitRecceive(句柄,发送数据指针、接收数据指针、数据长度、最大发送时间)
|