首页 > 编程知识 正文

单片机控制led流水灯程序,stm32f030

时间:2023-05-05 05:55:18 阅读:27001 作者:1000

使用目录1、实验工具2和STM32CubeMX生成代码HAL库安装点亮流水灯的STM32CubeMX2。 安装HAL库3 .新项目4.keil仿真调试(1)打开uvprojx文件(或在上一步中选择open project ) (2)将以下代码放入主函数)期间

一、实验工具http://www.Sina.com/http://www.Sina.com /安装教程STM32CubeMXmcuisp百度网盘链接: https://pan.

提取代码: h2xc KEIL5:最小核心板2,使用STM32CubeMX生成代码HAL库安装点亮流水灯1.STM32cubeMX

官方网站下载(官方网站下载需要绑定或注册邮箱)。

(1)以管理员身份运行安装程序,然后单击next。

)2)单击iacceptthetermsofthislicenseagreement ),然后选择Next。

)3)第一个勾选即可,第二个选择是ST公司是否同意收集你的个人使用信息等:

)4)选择安装位置。 默认位置安装在c驱动器上(注意:请不要在安装位置显示中文) :

(5)点击确定:

)6)直接点击NEXT,其他不设置后开始安装:

)7)安装完成。 结束点阵游戏。

2.Hal库STM32 HAL固件库的安装是硬件抽象层的缩写,中文名称为“硬件抽象层”。 HAL库是ST公司最近针对STM32的MCU推出的抽象层嵌入式软件,为实现STM32产品之间的zjdyj可移植性提供了便利。 HAL库的推出,可以说ST也逐渐抛弃了原来的标准固件库,这也让很多老用户不满。 但是,在HAL库推出的同时,还加入了许多第三方中间件,包括RTOS、USB、TCP/IP和图形。

与标准库相比,STM32的HAL库更抽象,ST的最终目的是实现STM32系列MCU之间的无缝移植,其他MCU也能实现快速移植。

从16年开始,ST公司逐渐停止更新标准固件库,相反倾向于更新HAL固件库和Low-layer基础库,停止更新标准库,今后使用STM32CubeMX更新HAL/LL库

)1)打开已安装的STMCubeMX

)2)单击help-manageembeddedsoftwarepackages :

)3)显示选择模型的画面,选中要安装的HAL库,单击" Install Now "直到安装成功。 下图:

3 .新建项目(1)返回STMCubeMX主界面,创建新项目:

)2)在part name中选择自己的芯片,点击信息栏中的具体芯片信息进行选择,点击start project :

)3)点击SYStem core,进入sys,在调试中选择serial wire :

)4)配置表,进入上面的rcc。 有两个表。 一个是hse和lse。 我们使用GPIO接口。 这些接口都在APB2上。

接下来,我们来看看时钟体系结构。 APB2总线的时钟由hse控制,同时必须在此接口上选择PLLCLK的右侧。

)5)将hse处设为Crystal/Ceramic Resonator :

)6)接下来点击相应的引脚设置输出寄存器。 这是output一项。 我一共选了三个。 是PA4、PB9、PC15 :

)7)单击项目管理器,放置自己的路径和项目名称,然后将IDE中的项目更改为MDK-ARM :

)8)进入代码生成界面,选择生成初始化. c/.h文件,然后单击生成代码,选择open project,到达KEIL5。

4.keil模拟调试(1)打开uvprojx文件(或在上一步中选择open project ) )。

打开main.c文件,滑动主函数的部分。

)2)将以下代码放入主函数(替换内容) 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; //延迟1sHAL_G

PIO_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);//延时1sHAL_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} (3)电路连接

根据设计的程序连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9

总电路:
红——B9
绿——C15
黄——A4

(4)烧录运行

串口烧录要断电之后把boot0置0才能正常运行:

(5)观察GPIO端口的输出波形

(1)Target界面中,选择跟正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。

(2)Debug页的设置:

(3)点击Debug,进入调试界面:

(4)选择逻辑分析仪:

(5)选择要观察的引脚:
①点击Setup Logic Analyzer

②添加要观察的引脚:

(6)相关设置

(7)运行程序:

(8)观察波形:

引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1s左右。

三、用寄存器方式实现点亮流水灯 1.项目创建

具体见ARM汇编程序调试:基于MDK创建纯汇编语言的STM32工程
不同之处:
1)芯片选择STM32F103C8
2)当出现下图时,直接叉掉,不做选择添加一个main.c文件:

将野火资料中的下图中的文件复制到新建的项目下:


右击文件夹,选择Add Existing Files to Group Source Group 1(或双击文件夹),选择All FIles,选择刚刚添加的启动文件,Add,Add之后Close:

打开魔术棒,如下图所示勾选Create HEX File:

2.编写代码

在main.c中写入函数:

#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(){} 3.编译程序

编译:

连接到电脑,打开mcuisp,上传HEX文件到stm32f103c8t6上:

成功点灯:

4.观察GPIO端口的输出波形

相关设置: 二.4.(4)
观察波形:
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1.12s左右。

四、总结

在单独使用keil写流水灯的时候,自己要写的相关语句比较多,用STMCubeMX+keil+hal库实现点灯比较容易。

参考资料

https://blog.csdn.net/as480133937/article/details/98885316
https://blog.csdn.net/junseven164/article/details/120807138?spm=1001.2014.3001.5501

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。