完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言
在做STM32单片机实验开发我们之前进行了开发环境的搭建,工程模板的建立以及单片机基础知识和GPIO相关知识的准备,下面我们进行32固件库开发第一个实验:控制LED,堪称单片机界入门的 hello Word,不仅可以熟悉单片机的引脚控制,更能对单片机的时钟进行深入了解,废话不多说,咱们进入正文,跳转文尾 一、硬件资源 我的实验采用的STM32C8T8最小系统单片机,采用其他的单片机也可以进行本实验 1、芯片命名介绍: STM32F103C8T6命名说明 [tr]符号说明[/tr]
STM32F103C8是高性能ARM-M3系列, 32位RISC核心操作,工作在一个72 MHz的频率,拥有Flash =64Kb RAM = 20Kb、两组10通道12位同步A/D、三个通用16位定时器和一个PWM定时器、1个CAN、2个I2C、2个SPI、3个URAT通道,一个USB等内嵌资源的芯片 一、电气原理图 下面是本次实验的板子,与LED原理图 因为板子只自带一个LED,因为不需要其他的控制方式,只需要芯片内给PC13 引脚置低,即可实现LED电路导通,另外需要找到烧写代码的下载原理图,连接电路,我是使用SWD下载方式,只需要连接4根线,找到板子上的SWD接口原理图并对照实物图 二、电器件连接 因为不需要其他的控制方式,只需要连接一个下载电路。 三、开发思路 1、须知
四、代码实践 因为LED 作为STM32板子的一个外设,我将其封装为一个模块放入HARDWARE文件中,以后需要可以直接调用, led.h文件 #ifndef LED_H #define LED_H void LED_Init(void); #endif ==引用条件编译原因,防止多文件编译时,发生重复编译 == 下面是led.c文件函数示例: #include "led.h" #include "stm32f10x.h" //顶层头文件 void LED_Init(void) { GPIO_InitTypeDef LED_InitStruct; //叶柄:定义一个结构体变量LED_InitStruct //1、打开串口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE ); //2、配置并初始化串口 LED_InitStruct.GPIO_Pin = GPIO_Pin_13; //PC13 LED_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 LED_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &LED_InitStruct); //初始化串口 //3、控制串口读写(一般是主函数控制读写,这里LED默认关闭,即置高) GPIO_SetBits(GPIOC, GPIO_Pin_13); } 主函数main.c #include "stm32f10x.h" #include "led.h" #include "delay.h" int main () { LED_Init(); while(1) { GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮 delay_s(1); GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED熄灭 delay_s(1); } return 0; } 五、问题与思考 检查不到设备: 解决方式:检查驱动是否安装好,检查型号选择是否正确ST-link等 debug,中看不到寄存器——案例一 需引入一个文件STM32F103_SVD文件 函数相似导致选错 ——案例二,如下 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE ); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE ); 注意分清楚函数字母的含义就不会再次出错了 思考 1、为什么在led.c文件中引用了rcc、gpio相关函数,却没有调用相关头文件,而用STM32f10x代替了所有库函数头文件 原因:顶层头文件stm32f10x.h这个文件包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等, 好吧可能是不是这个原因,我查不到 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3458 浏览 1 评论
9002 浏览 16 评论
4051 浏览 18 评论
1113浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 05:46 , Processed in 1.426222 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号