173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32调用初始化结构体

keros@mark 2023-03-18 资讯中心

stm32st-link无法初始化设备

stm32st-link无法初始化设备解决方法:

1、开启时钟。

2、初始化GPIO结构体(包括8个LED和锁存器)PC8~PC15、PD2。

3、写一个控制LED的函数。

4、定义一个LED的全局变量即可初始化。

stm32点亮led灯用到的模块

,模块如下:

1

把工程项目模板重新复制一份,改名为“点亮一个LED灯”

在USR文件夹下创建led文件夹

led文件夹下面新建以下两个文件

bsp_led.c

bsp_led.h

2

然后我们用keil打开这个工程项目

点击如下图圈上的图标

3

新建一个led文件夹

然后我们把刚新建的文件导入到led文件夹

4

在bsp_led.h文件里

#ifndef __BSP_LED_H__

#define __BSP_LED_H__

#include "stm32f10x.h"

#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB

#define LED1_GPIO_PORT GPIOB

#define LED1_GPIO_PIN GPIO_Pin_5

void LED_GPIO_Config(void);

#endif

5

在bsp_led.c文件里

#include "./led/bsp_led.h"

void LED_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

//打开外设时钟

RCC_APB2PeriphClockCmd(LED1_GPIO_CLK,ENABLE);

//配置初始化结构体

GPIO_InitStruct.GPIO_Pin = LED1_GPIO_PIN;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;

//调用外设初始化函数,把配置好的结构体成员写到寄存器里面

GPIO_Init(LED1_GPIO_PORT,GPIO_InitStruct);

}

6

在main.c文件里

#include "./led/bsp_led.h"

void delay(uint32_t count);

int main(void)

{

LED_GPIO_Config();

while(1)

{

GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);

delay(0xfffff);

GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);

delay(0xfffff);

}

}

void delay(uint32_t count)

{

for (;count!=0;count--);

}

STM32 FSMC_NORSRAMTimingInitTypeDef 结构体成员初始化

根据你这个norflash的datasheet来计算,里面有详细时序图。

请看此文档:

第一张图是read cycle timing,读取norflash的内容。

第二张图是program/erase cycle timing,写数据 / 擦除时间,你可以看到这个里面AddressSetupTime,AddressHoldTime,DataSetupTime等都有一个最小时间限制,例如AddressHoldTime是30ns,那么你给这个芯片的AddressHoldTime就不能小于30ns,小于30ns的话很可能会导致传输出错。然后在STM32里面这个数值具体是多少和你配置的主频、fsmc速度等等有关系。你可以以ST的AN2784 Application note作为参考,去计算一个准确的值。

AN2784 Application note:

看这个文档需要点耐心,参数比较多。

其实你也不用一一计算,很麻烦,可以走走捷径,你首先可以把数值都调大一点,因为这个时间小了的话norflash可能不能够识别,所以调大肯定能够识别。待norflash能够正确读取之后,把之间参数改小,改到不能正确读取的时候为止,那么此时就是临界值了。我平时是这么做的,尤其是用FSMC驱动液晶屏,我觉得这种方法很好,个人观点,希望对你有用。

本文标签:stm32调用初始化结构体

产品列表
产品封装
友情链接