这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【炫Q-STM32】初识(一)

共12条 1/2 1 2 跳转至

【炫Q-STM32】初识(一)

专家
2015-06-22 19:02:39     打赏

端午归来,阖家安康,开始学习STM32,要入门,当然还是blink,要blink要有板子,要有开发环境

好多小伙伴羡慕有电池,据说走不了航空,不知真假,正好可以用来测试LED,似乎都是红色的,下边就是开发环境,竟然发现电脑里似乎有

天宇说“stm 需要Keil mdk”

应该是有的,想起来了,原来是以前买的一个屏幕驱动带的,NEWBUY-TFT,牛掰TFT?

败家啊,一直没有学习




专家
2015-06-22 19:12:34     打赏
2楼
去下载天宇提供的神舟I号光盘资料

http://pan.baidu.com/s/1pJ3eEiJ

大概有1G+呢,还是压缩包,感觉现在要学的东西太多了,力不从心啊

从PDF看起吧:STM32神舟I号用户手册从入门到精通2013.9.30.pdf

找到了blink的素材,就不用外接LED了



专家
2015-06-22 19:31:13     打赏
3楼

代码据说有三种上传方式,但是前两种都需要额外工具,第三种是通过串口,估计只能用这种了,

两个跳线,然后接上USB线,识别出来COM38



专家
2015-06-22 19:59:02     打赏
4楼

偶然看到的神舟系列资料http://blog.sina.com.cn/s/blog_9e3a138e0101daz8.html

下边需要串口下载工具Flash Loader Demonstrator

选择COM38然后记得先按RESET再点Next

下载完了还不执行,还要拔掉J8再Reset才能运行,效果出来了,不过感觉比Arduino难用多了



专家
2015-06-22 20:05:48     打赏
5楼

寄存器版blink

#define     __IO    volatile             
typedef unsigned           int uint32_t;
typedef __IO uint32_t  vu32; 
typedef unsigned short     int uint16_t;

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */

#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)

/************ GPIOB <*************/
typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

typedef struct
{
  __IO uint32_t CR;
  __IO uint32_t CFGR;
  __IO uint32_t CIR;
  __IO uint32_t APB2RSTR;
  __IO uint32_t APB1RSTR;
  __IO uint32_t AHBENR;
  __IO uint32_t APB2ENR;
  __IO uint32_t APB1ENR;
  __IO uint32_t BDCR;
  __IO uint32_t CSR;
} RCC_TypeDef;

/********* GPIOB管脚的内存对应地址 *******/
#define PERIPH_BASE           ((uint32_t)0x40000000) 
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0c00)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)

/************ RCC时钟 <*************/
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)
#define RCC_BASE              (AHBPERIPH_BASE + 0x1000)
#define RCC                 ((RCC_TypeDef *) RCC_BASE)


/************ www.armjishu.com *******/
void Delay(vu32 nCount);

int main(void)	 //main是程序入口
{
  	/* 使能APB2总线的时钟,对GPIO的端口B时钟使能 */
  	RCC->APB2ENR |= RCC_APB2Periph_GPIOB;	

	/*-- GPIO Mode Configuration速度,输入或输出 -----------------------*/
	/*-- GPIO CRL Configuration 设置IO端口低8位的模式(输入还是输出)---*/
	/*-- GPIO CRH Configuration 设置IO端口高8位的模式(输入还是输出)---*/
	GPIOB->CRL &=  0xFFFFF0FF;
	GPIOB->CRL |=  0x00000300;

  	while (1)
  	{	
  		GPIOB->BRR = GPIO_Pin_2; 
		Delay(0x2FFFFF);
		GPIOB->BSRR = GPIO_Pin_2;
    	Delay(0x2FFFFF);
  	}
}

void Delay(vu32 nCount)		 //通过不断for循环nCount次,达到延时的目的口
{
  for(; nCount != 0; nCount--);
}

 


专家
2015-06-22 20:08:17     打赏
6楼

看得头大,看来还是得用库

/******************** (C) COPYRIGHT 2013 STMicroelectronics ********************
* File Name          : main.c
* Author             : WWW.ARMJISHU.COM之STM32核心团队  JESSE 
* Version            : V2.0.1
* Date               : 01/09/2013
* Description        : STM32神舟I号开发板    广州
*******************************************************************************/
#include "stm32f10x.h"

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

int main(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;		/* 配置神舟I号LED灯使用的GPIO管脚模式*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*使能LED灯使用的GPIO时钟*/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);	   /*神舟I号使用的LED灯相关的GPIO口初始化*/

	while (1)
	{	   
			GPIO_SetBits(GPIOA,GPIO_Pin_2);             /* 熄灭LED指示灯 */
			Delay(0x2FFFFF);
			GPIO_ResetBits(GPIOA,GPIO_Pin_2);		   	/* 点亮LED指示灯 */
			Delay(0x2FFFFF);	
	}
}

 


专家
2015-06-22 21:53:42     打赏
7楼

常见问题

http://blog.chinaunix.net/uid-20788517-id-296932.html


菜鸟
2015-06-22 22:10:22     打赏
8楼
烧写工具推荐用USB ISP 烧写,比官方的烧写工具简单方便STM ISP下载器MCUISP.rar 还有stm32开发工具除了KEIL MDK以外,还可以用IAR ARM (逼格挺高,据说比keil优化好)。

院士
2015-06-22 23:15:08     打赏
9楼
看上去好高级的样子呀~~

专家
2016-02-01 16:07:12     打赏
10楼
翻出来给小撸参考

共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]