STM32结构体地址偏移问题

入口给基地址,地址偏移每次4个字节,怎么到0C10就不是呢... 入口给基地址,地址偏移每次4个字节,怎么到0C 10就不是呢 展开
 我来答
意法半导体(中国)投资有限公司 2023-06-12
展开全部
STM32产品广泛应用于工业控制、消费电子、物联网、通讯设备、医疗服务、安防监控等应用领域,其优异的性能进一步推动了生活和产业智能化的发展。意法半导体致力于引领单片机技术和产品的创新,推动生态系统的建设,为用户提供满意的产品和技术服务。意法半导体单片机产品线拥有业界宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗、超高性能方向,同时兼具很强的市场竞争力。STM32是ARM Cortex内核单片机和微处理器市场和技术方面的佼佼者,目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超过100…
DoramiHe
2017-03-30 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59543
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
STM32学习笔记——测试闪灯程序

Created on: 2012-10-28
Author: zhang bin

学习笔记
for STM32F103C8
redesigned by zhang bin
2012-10-28
versions:V-0.1
All Rights Reserved

//所使用的是STM32F103C8共有48个管脚,共有两组GPIO,为GPIOA和GPIOB,每组有从0到15共16个引脚
//注意对STM32F103C8的操作和对库函数的使用,在使用时,要时刻参考《STM32F10xxx使用手册》和《STM32的函数说明》这两个文档

#include "stm32f10x_lib.h"

GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO配置的结构体变量 包括GPIO引脚,引脚速度,引脚模式
ErrorStatus HSEStartUpStatus; //枚举类型,错误状态变量定义 存储外部高速时钟HSE状态

void RCC_Configuration(void); //RCC配置函数 RCC:复位和时钟控制
void NVIC_Configuration(void); //NVIC配置函数 NVIC:嵌套向量中断控制器
void Delay(vu32 nCount);

int main(void)
{
#ifdef DEBUG
debug();
#endif

RCC_Configuration(); //系统时钟配置函数

NVIC_Configuration(); //NVIC配置函数

//使能APB2总线外设时钟 APB1,APB2两条连接总线的外设。具有多个预分频器用于配置AHB的频率,高速APB(APB2)和低速APB(APB1)
//区域。AHB和高速APB的最高频率为72MHz,低速APB的最高频率为36MHz
//APB2是的I/O脚可达18MHz的反转速度
//AHB到APB(1,2)桥,该桥用来连接所有的APB设备
//两个AHB/APB桥在AHB和两个APB总线之间提供完全同步地方连接。APB1被限制在36MHz,APB2工作在全速状态(根据设备的不同
//可以达到72MHz)
//有些外设连接到APB1上,有些外设连接到APB2上,具体的情况参看使用手册。
//所以在外设使用前,要先调用函数使能相应总线的时钟

//通用输入/输出GPIO 备用输入/输出AFIO
//IO端口寄存器必须以32位字的方式访问,不允许以半字或者字节的方式访问
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能相应的外设的时钟
//这里使能GPIOA,GPIOB和备用IO (AFIO)的时钟

//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //关闭调试 端口重新映射 使用仿真器调试时,不能用此语

//下面是GPIO的设置,注意方法
//配置相应的IO。注意配置IO功能时,使用的是GPIO配置的结构体。前面已经定义了GPIO的结构体变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // 选择所有脚 #define GPIO_Pin_All ((u16)0xFFFF)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //配置成推挽式输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出模式下 I/O输出速度 50M HZ
GPIO_Init(GPIOA, &GPIO_InitStructure); //用定义的结构体初始化PA口
GPIO_Init(GPIOB, &GPIO_InitStructure); //用定义的结构体初始化PB口

while (1)
{
GPIO_Write(GPIOB, (u16)~GPIO_ReadOutputData(GPIOB)); //写一个字数据到PB口 写入的数据是当前GPIOB读取的值然后取反
//就相当于把GPIOB的值取反
Delay(0x8FFFFF); // 延时
GPIO_Write(GPIOB, (u16)~GPIO_ReadOutputData(GPIOB)); //写一个字数据到PB口 把GPIOB的值取反
Delay(0x8FFFFF); // 延时
}
}

//复位和时钟设置函数 注意配置的方法
void RCC_Configuration(void)
{
//复位RCC外部设备寄存器到默认值
RCC_DeInit(); //将外设RCC寄存器重设为缺省值

//打开外部高速晶振
RCC_HSEConfig(RCC_HSE_ON); //设置外部高速晶振HSE RCC_HSE_ON:打开HSE晶振,RCC_HSE_OFF:关闭HSE晶振
//RCC_HSE_Bypass:HSE晶振被外部时钟旁路

//等待外部高速时钟准备好
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE起振,返回错误状态。前面已经定义了ErrorStatus枚举类型的变量
//HSEStartUpStatus,SUCCESS:HSE晶振稳定且就绪,ERROR:HSE晶振未就绪

if(HSEStartUpStatus == SUCCESS) //外部高速时钟已经准备好
{
//开启FLASH的预取功能
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能或失能预取指缓存,FLASH_PrefetchBuffer_Enable:预取指缓存使能
//FLASH_PrefetchBuffer_Disable:预取指缓存失能

//FLASH延迟2个周期
FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器代码延时时钟周期数,可以设置FLASH_Latency_0:0延时周期,
//FLASH_Latency_1:1延时周期,FLASH_Latency_2:2延时周期

//配置AHB(HCLK)时钟=SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟是系统时钟SYSCLK的多少分频,这里设为1分频,还可以指定2,4,8,16,64,128,256,512
//分频

//配置APB2(PCLK2)钟=AHB时钟
RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟APB2是AHB的多少分频,这里设为1分频,还可以指定为2,4,8,16分频

//配置APB1(PCLK1)钟=AHB 1/2时钟
RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟APB1是AHB的多少分频,这里设为2分频,还可以指定为1,2,4,8,16分频

//配置PLL时钟 == 外部高速晶体时钟*9 PLLCLK = 8MHz * 9 = 72 MHz
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //设置PLL时钟及倍频系数 第一个参数设置PLL的输入时钟源
//可以有RCC_PLLSource_HSI_Div2:HSI时钟频率除以2,RCC_PLLSource_HSE_Div1:HSE时钟频率,RCC_PLLSource_HSE_Div2:
//HSE时钟频率除以2
//第二个参数设置PLL的倍频系数,可以是2~16倍频,这里设为9倍频
//警告:必须正确设置软件,使PLL输出时钟频率不超过72MHz

//使能PLL时钟
RCC_PLLCmd(ENABLE); //使能或失能PLL,参数可以取ENABLE或DISABLE,如果PLL被用于系统时钟,那么它不能被失能

//等待PLL时钟就绪
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //检查指定的RCC标志位设置与否,输入参数为待检查的RCC标志位
//其取值情况详见《STM32的函数说明(中文)》P211.返回值为RCC_FLAG的新状态,SET或RESET
{
}

//配置系统时钟 = PLL时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置系统时钟SYSCLK,输入参数用于指定用作系统时钟的时钟源
//可以为:RCC_SYSCLKSource_HSI:选择HSI作为系统时钟,RCC_SYSCLKSource_HSE:选择HSE作为系统时钟,RCC_SYSCLKSource_PLLCLK
//选择PLL作为系统时钟

//检查PLL时钟是否作为系统时钟
while(RCC_GetSYSCLKSource() != 0x08) //函数RCC_GetSYSCLKSource()返回用作系统时钟的时钟源。
//返回值可以是:0x00:HSI作为系统时钟,0x04:HSE作为系统时钟,0x08:PLL作为系统时钟
{
}
}
}

//嵌套向量中断控制器配置函数
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //设置向量表的位置和偏移,第一个参数指定向量表的位置在RAM还是在
//程序存储器flash中,取值可以是NVIC_VectTab_RAM:向量表位于RAM, NVIC_VectTab_FLASH:向量表位于FLASH。第二个参数为
//向量表基地址的偏移量,对于FLASH,该参数值必须高于0x08000100,对于RAM,必须高于0x100.它同时必须是256(64*4)的整数倍
#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}

void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}

#ifdef DEBUG

//assert_failed编写于文件main.c或其他用户C文件中

void assert_failed(u8* file, u32 line)
{

while (1)
{
}
}
#endif
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F207是一款非常优秀的微控制器芯片,它是ST(意法半导体)最新推出的基于90纳米工艺的STM32F2系列芯片之一。STM32F207芯片内置了丰富的外设接口,包括ADC、DAC、UART、SPI、I2C等,可以轻松实现各种复杂的... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式