IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32最小系统核心板(STM32F103C8T6)实现流水灯 -> 正文阅读

[嵌入式]STM32最小系统核心板(STM32F103C8T6)实现流水灯

目录

实验准备

使用寄存器方式

搭建程序

搭建电路

亮灯

STM32CubeMX生成代码

下载

调试

亮灯?


本次实验,我们来做一个流水灯实验。听说这是个很有趣的东西。

实验准备

? ? ? ? 准备阶段,我们要准备STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED灯,然后要准备一些驱动,这里我直接偷懒,用好朋友的U盘转来的,这样下载就不用那么久了。这里是需要mcuisp和startup。

使用寄存器方式

搭建程序

? ? ? ?首先进入上期提到的keil软件,选择头上的project,新建一个μVersion project,这里我给他取名叫LED,然后如下图选择即可。再下一个界面就不能像上期一样勾选了,我们要先选中CMSIS里面的core,勾选后方5.4.0,接着选中device里面的startup,检查后方1.0.0的不勾选。然后就可以ok了。

?

?????????看到这里的这个键,点开,设置output,选择create hex file,

? ? ? ? ?选择左侧source group,右击创建led.c

? ? ? ? ?在项目中写下如下代码,这里选择的三个点是PA4,PB9,PC15。


#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800

#define RCC_APB2ENR (*(unsigned int *)0x40021018)

#define GPIOB_CRH (*(unsigned int *)0x40010C04)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)

#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)
	


void SystemInit(void);
void Delay_ms(volatile  unsigned  int);
void A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);
void Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<800;i++);
}

void A_LED_LIGHT(){
	GPIOA_ODR=0x0<<4;		//PA4低电平
	GPIOB_ODR=0x1<<9;		//PB9高电平
	GPIOC_ODR=0x1<<15;		//PC15高电平
}
void B_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4高电平
	GPIOB_ODR=0x0<<9;		//PB9低电平
	GPIOC_ODR=0x1<<15;		//PC15高电平
}
void C_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4高电平
	GPIOB_ODR=0x1<<9;		//PB9高电平
	GPIOC_ODR=0x0<<15;		//PC15低电平	
}

int main(){
	int j=100;
	// 开启时钟
	RCC_APB2ENR |= (1<<3); // 开启 GPIOB 时钟
	RCC_APB2ENR |= (1<<4); // 开启 GPIOC 时钟
	RCC_APB2ENR |= (1<<2); // 开启 GPIOA 时钟
	
	
	// 设置 GPIO 为推挽输出
	GPIOB_CRH&= 0xffffff0f;	//设置位 清零		
	GPIOB_CRH|=0x00000020;  //PB9推挽输出

	GPIOC_CRH &= 0x0fffffff; //设置位 清零		
	GPIOC_CRH|=0x30000000;  //PC15推挽输出


	GPIOA_CRL &= 0xfff0ffff; //设置位 清零		
	GPIOA_CRL|=0x00010000; //PA4推挽输出

	// 3个LED初始化为不亮(即高点位)
	GPIOB_ODR |= (1<<9); 
	GPIOC_ODR |= (1<<15); 
	GPIOA_ODR |= (1<<4);  
	
	while(j){
		
		B_LED_LIGHT();
		Delay_ms(1000000);

		C_LED_LIGHT();
		Delay_ms(1000000);

		A_LED_LIGHT();
		Delay_ms(1000000);
	}
	
}


void SystemInit(){
	
}

? ? ? ? ?这里注意,我们需要一个驱动,这个驱动要和我们的led.c在同一个目录下。(如果放在了其他地方可以把他复制过去)接着选择左侧source group1右击文件夹,选择Add Existing Files to Group Source Group 1,文件类型改为All FIles,选择刚刚添加的启动文件,add之后close。

????????现在就可以回来编译了。

搭建电路

? ? ? ? 拿出我们准备的那些工具开始连接电路板。

? ? ? ? 首先把灯装上去。以面对自己的那边为准插入三个灯灯,注意长头在最外侧,短头在第三排。然后接一根白线,如图所示。

? ? ? ? ?接下来把芯片黄头朝左,右边3.3的位置和白线的位置平行,针在以蓝色线为基准第三排整体插入,然后把黄色部分上方的那个摘下来放右边。这里注意:一要小心,二要把下面针部分完全插进去,不然容易出问题。

? ? ? ? ?因为我们这里是红色B9,绿色C15,黄色A4,所以使用电线将这些一一连接起来,这里注意在中间同一边的,只要是同一竖排一般都是等价的,可以不用太刻意位置。

? ? ? ? ?接下来准备我们的接口,我这里使用的是USB的头,把自带的电线接成这样进行准备。

?

? ? ? ? ?接着从上往下数,1.4接在芯片右侧的1.4头,2.3分别用电线接在芯片的A9.A10的位置,电路板就接好了。

?

亮灯

? ? ? ? ?这里直接打开mcuisp,选择dtr低电平rts高电平,程序文件选择之前编译成功的hex文件,先读器件信息,成功之后开始编程。待到下方绿色进度条加载满了之后,把电路板从电脑上取下来,把之前黄色的那个东西还原,再把电路接回电脑,他就成功了(理论上)。?

STM32CubeMX生成代码

下载

????????首先前往stm官网下载一个stm32cubemx,下载解压完成之后开始安装,安装途中有需要选项的部分这里指引一下,没有出现指引的地方就直接next就可以了。

STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

? ? ? ? ?安装完成之后打开。在help帮助里面manage那个,下载HAL库。

?

调试

? ? ? ? ?下载完成之后,回到主界面,新建项目。选择stm32f103c8,进入以下界面。?

?

?????????点击system core,进入SYS,在debug下选择serial wire。

? ? ? ? 选择上方clock configuration,找到pllclk勾选

? ? ? ? 然后回到pinout那里,找到rcc,把第一排的hse改为如图。

? ? ? ? ?找到gpio,把我们要用的三个口(PA4,PB9,PC15)设置为output

?点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM。

选择左侧code generator,勾选第二栏第一项,后面点击generate code,选择open project。

亮灯?

????????接下来就是keil界面,打开左侧第二个文件夹,打开main.c,找到里面的main部分,改为如下内容,然后编译。

int main(void)
{
  SystemClock_Config();//???????
  MX_GPIO_Init();//gpio???
  while (1)
  {		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4??
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9??
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15??
		HAL_Delay(1000);//??1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4??
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9??
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15??
		HAL_Delay(1000);//??1s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4??
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9??
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15??
		HAL_Delay(1000);//??1s
	}

  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

?这里再次把那个黄色的玩意置右,连接电脑。

再次打开mcuisp,更改hex文件路径,然后如寄存器方式运行。

?

成了!?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:53:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:49:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码