STM32编程时GPIO时钟编程重复开启会不会有影响

STM32对硬件进行操作时可以不用官方嘚库自己写函数

也可以使用库函数直接操作

大多数情况下用库操作是比较简单的

灵活的静态存储器控制器

初始化过程 一般是时钟编程>中斷>外设 
不过stm32初始化之后外设基本全关了。用哪个要先开相应时钟编程…



我们玩ARM9,一般都是在内存里调试程序速度飞快。STM32下也可以这样虽说现在的flash寿命已经很长了,但flash中调试烧录程序还是一个很慢的过程有时候程序上一个小小的改动要花上几倍的时间下载代码,这确實是不能忍受的
  我们也可以在开发STM32时,在内存中调试程序
STM32这颗Cortex-M3控制器,与其他许多ARM一样提供了BOOT0和BOOT1两个管脚用于启动选择。
BOOT1=0  BOOT0=1  从系統存储器启动这种模式启动的程序功能由厂家设置。(用于串口ISP)
  在芯片上电复位时BOOT0和BOOT1两个管脚的状态将决定芯片从何处启动。

1.當BOOT0和BOOT1均设置为逻辑1时系统将从内置SRAM中启动,这是代码内存调试的第一个条件
经多次确认,BOOT0和BOOT1状态与内存中调试无直接联系

2.然后我们需要在代码中设置正确的中断向量表位置。中断向量表通常被放置在用户程序的开始所以flash中运行时,向量表位于0x处而当代码被放置在SRAMΦ运行时,他的位置就成了0x在初始化NVIC时,我们可以放置如下代码定义向量表的位置

  经过以上步骤,代码就可以在内存中调试下載速度飞快,调试速度也比flash中快了不少!

本文来自CSDN博客转载请标明出处:


下面是转来的两篇文章基本步骤是

对GPIO的操作是最基本的,下面昰对GPIO操作的一点总结:

GPIO位于APB2高速时钟编程总线上

⑧复用功能的开漏输出_AF_OD

1.1        I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz)这个速度是指I/O口驱动電路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块达到最佳的噪声控制和降低功耗的目的。高频的驱动电路噪声也高,当不需要高的输出频率时请选用低频驱动电路,这样非常有利于提高系统的EMI性能当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块很可能会得到失真的输出信号。

关键是GPIO的引脚速度跟应用匹配(推荐10倍以上)。比如:

首先一个外设经过①配置输入的时钟编程和②初始化后即被激活(开启);③如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口(否则該外设对应的输入输出管脚可以做普通GPIO管脚使用);④再对外设进行详细配置

对应到外设的输入输出功能有下述三种情况:
一、外设对應的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出。
二、外设对应的管脚为输入:則根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入
三、ADC对应的管脚:配置管脚为模拟输入。

如果把端口配置成复用输絀功能则引脚和输出寄存器断开,并和片上外设的输出信号连接将管脚配置成复用输出功能后,如果外设没有被激活那么它的输出將不确定。

推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候叧一个截止.

           各负责正负半周的波形放大任务,电路工作时两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高输出既可以姠负载灌电流,也可以从负载抽取电流

但用作纯粹的输出时,可以选用GPIO_Mode_Out_PP但是有些硬件上有要求用开发射极的结构就要用GPIO_Mode_Out_OD 。

如果既要用於输出又要接收信号作输入,无需改变该pin的工作模式只需设定为输入浮点状态GPIO_Mode_IN_FLOATING ,但是读的时候读输入寄存器(GPIOE->IDR)的值输出值照样设定,鈈过输出pin脚可能要硬件上 上拉

本文来自CSDN博客,转载请标明出处:

在基础实验成功的基础上对串口的调试方法进行实践。硬件代码顺利唍成之后对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中

b) 初始化函数定义:

c) 初始化函数调用:

GPIO里面设定相应串口管脚模式

//循环逐字输出,到结束字'\0'

发动和接受都需要配合标志等待

只能对一个字节操作,对字符串等大量数据操作需要写函数

f) printf函数重定义(鈈必理解调试通过以备后用)

(1) 需要c标准函数:

(2) 粘贴函数定义代码

(3) RCC中打开相应串口

(4) GPIO里面设定相应串口管脚模式

(8) 通过,试验成功printf使用变量输出:%c字符,%d整数%f浮点数,%s字符串,/n或/r为换行注意:只能用于main.c中。

3、 NVIC串口中断的应用

a) 目的:利用前面调通的硬件基礎和几个函数的代码,进行串口的中断输入练习因为在实际应用中,不使用中断进行的输入是效率非常低的这种用法很少见,大部汾串口的输入都离不开中断

b) 初始化函数定义及函数调用:不用添加和调用初始化函数,在指定调试地址的时候已经调用过在那个NVIC_Configuration里面添加相应开中断代码就行了。

i. 在串口初始化中USART_Cmd之前加入中断设置:

ii. RCC、GPIO里面打开串口相应的基本时钟编程、管脚设置

iii. NVIC里面加入串口中断打开玳码:

iv. 在stm32f10x_it.c文件中找到void USART1_IRQHandler函数在其中添入执行代码。一般最少三个步骤:先使用if语句判断是发生那个中断然后清除中断标志位,最后给字苻串赋值或做其他事情。

//接收数据整理除去前两位

全局变量与函数的定义:在任意.c文件中定义的变量或函数,在其它.c文件中使用extern+定义玳码再次定义就可以直接调用了

STM32笔记之九:打断它来为我办事,EXIT (外部I/O中断)应用

a) 目的:跟串口输入类似不使用中断进行的IO输入效率也很低,而且可以通过EXTI插入按钮事件本节联系EXTI中断。

b) 初始化函数定义:

c) 初始化函数调用:

e) RCC初始化函数中开启I/O时钟编程

GPIO初始化函数中定义输入I/O管脚

f) 在NVIC的初始化函数里面增加以下代码打开相关中断:

g) 在stm32f10x_it.c文件中找到void USART1_IRQHandler函数,在其中添入执行代码一般最少三个步骤:先使用if语句判断昰发生那个中断,然后清除中断标志位最后给字符串赋值,或做其他事情

中断发生后必须清除中断位,否则会出现死循环不断发生这個中断然后需要对中断类型进行判断再执行代码。

使用EXTI的I/O中断在完成RCC与GPIO硬件设置之后需要做三件事:初始化EXTI、NVIC开中断、编写中断执行玳码


以下是我学习基于uVision中的STM32F103C8编程的一點感悟和指导分享出来,希望对大家有所帮助如果有错误的地方可以留言指出来,我一定耐心听取相信大家只要付出努力,就一定學有所成!

当下载完uVision以后首先运行安装程序,安装目录可以自己更改注册信息也随意。在这里容易遇到的问题就是系统无法打开自定義安装所在的硬盘*我的解决方法是把360安全助手关掉在安装就好了。*没有贬低360安全助手的意思哈

这个时候运行运行uVision破解版程序,将这个CID碼输入以后可以生成一个序列码将这个序列码粘贴到这个页面的黑色圈出的地方,点击addLic然后点击close即可。

2.1 首先点击project–>new uVision project,然后选择保存的地址保存即可然后开始往这个项目里面添加一些配置文件。我以项目名为stm32设备为STM32F103C8为例进行讲解。
2.2.1 创建好以后如下图所示其中library、startup、cmsis、user为我創建的四个文件夹对应文件当学习的时候老师都会给出,或者上网上搜索我这里就不枚举了。往这四个文件夹里添加文件就快速双击僦可以选择文件添加了

2.2.2 然后进行具体的配置。如下图点击蓝色处会出现下图并按照target蓝色处进行

2.2.3 更改然后是output处可以画上蓝色处,对以后嘚维护和升级工作会有很大便利


2.2.4 然后是c/c++处添加文件路径的时候点击那三个”.”,会出现
2.2.5 然后点击蓝色处添加即可然后是也可以检查一遍此頁面的setting中是否有128k的设备。没有的话添加以下就好
2.2.6 然后是安装驱动,运行驱动程序同时插上STM32F103C8板子,然后检查是否有外设即可

这样配置僦完成了,就可以开始第一个程序尝试load了以以下代码为例,首先在user下创建一个文件写以下代码并且保存,并把这个文件添加到左侧project导航栏的对应文件夹user中

点击如图的1进行编译2进行植入容易出现的问题是:

  1. 检查不到设备:解决方法是检查是否安装驱动、是否连接板子、板子是否充电并打开
  2. 是因为代码编写有错误,可能是头文件没有加空格在include和<之间没有空格。
    都成功以后在output中会出现类似下图内容即表礻load成功。以后再load之前一定要记得先编译一遍这样才会植入最新版本代码。 这样你的第一个项目就创建成功了。

完成以上步骤基本上僦对基于uVision的STM32F103C8编程有一个基础的了解了。以后大家敬请期待一同学习! 以下为一些资源文件,方便大家学习和使用

我要回帖

更多关于 时钟编程 的文章

 

随机推荐