STM32配置PC13-PC15

发布者:omega34最新更新时间:2016-09-26 来源: eefocus关键字:STM32  配置  PC13-PC15 手机看文章 扫描二维码
随时随地手机看文章
在STM32的数据手册的管脚分配图中可以看到:PC14与OSC32_IN公用一个引脚,PC15与OSC32_OUT公用一个引脚,它们的使用方法如下:
 
当LSE(低速外部时钟信号)开启时,这两个公用管脚的功能是OSC32_IN和OSC32_OUT。
当LSE(低速外部时钟信号)关闭时这两个公用管脚的功能是PC14和PC15。
 
备用区域控制寄存器(RCC_BDCR)的LSEON用于控制LSE的开启或关闭。关于这个寄存器的用法请参看《STM3210x技术参考手册》。
 
 
 
 
文档下面有一段话:
PC13,PC14和PC15引脚通过电源开关进行供电,因此这三个引脚作为输出引脚时有以下限制: 
作为输出脚时只能工作在2MHz模式下 
最大驱动负载为30pF  
同一时间,三个引脚中只有一个引脚能作为输出引脚。
在最新版本的文档中,“同一时间,三个引脚中只有一个引脚能作为输出引脚”这句话已经去掉了,即三个引脚可以同时作为输出引脚,但其他条件没有变:不能用这些引脚作为电流源,比如驱动一个LED等。
 
 
STM32配置PC13-PC15 -  ╄→风、吹不散 - ╄→风、吹不散
 
 
  PWR_BackupAccessCmd(ENABLE);//允许修改RTC 和后备寄存器
 
  RCC_LSICmd(DISABLE);//关闭外部低速外部时钟信号功能 后,PC14 PC15 才可以当普通IO用。
  
  BKP_TamperPinCmd(DISABLE);//关闭入侵检测功能,也就是 PC13,也可以当普通IO 使用
 
 
 
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//开C口时钟,复用时钟。
 
 
GPIO_InitTypeDef GPIO_InitStructure;//设为输出 注意:2MHZ
 
GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_12|GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;           
GPIO_Init(GPIOC, &GPIO_InitStructure); 
 
PWR_BackupAccessCmd(ENABLE);//允许修改RTC 和后备寄存器
 
RCC_LSEConfig(RCC_LSE_OFF);//关闭外部低速外部时钟信号功能 后,PC13 PC14 PC15 才可以当普通IO用。
 
// BKP_TamperPinCmd(DISABLE);//关闭入侵检测功能,也就是 PC13,也可以当普通IO 使用
 
// BKP_ITConfig(DISABLE);
这样就可以当输出用啦。
 
 
 
作为GPIO输出的配置过程:
 
(1).使能GPIOC时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  
(2).配置GPIOC
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
(3).然后写高写低
  GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_SET); 
  GPIO_WriteBit(GPIOC, GPIO_Pin_15, Bit_SET); 
  GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_RESET); 
  GPIO_WriteBit(GPIOC, GPIO_Pin_15, Bit_RESET);
 
以上代码跑在两个板子上,一个是backup区域里的RCC_DBCR的LSEON为0,即LSE关闭,以上(3)的操作从示波器上看到了电平相应变换;另外一个板子,backup区域里的RCC_DBCR的LSEON为1,即LSE打开,则以上(3)的操作从示波器上看到无效。
 
 
 
 
 
作为GPIO输入的配置过程:
 
只是把以上的(2)稍微改一下,(3)就不用了
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
外部连接为:在PC14引脚焊了一个电阻,电阻另一端通过跳线在上拉到3.3V和下拉到地的两种情况下,读出GPIOC_IDR.14分别为"1"和"0"。
 
 
 
 
 
作为外部中断输入的配置过程:
 
1.时钟使能
// + osc32_in/out --> pc14/15
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_AFIO, ENABLE);
注意要使能AFIO的时钟哦
 
2.中断配置 
  // + for EXTI on PC.14 at falling edge
  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
 
3. GPIO配置同上
4. EXTI配置
// + for PC14 EXTI @ falling edge
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource14);
  EXTI_InitStructure.EXTI_Line = EXTI_Line14;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
 
5. 中断处理ISR
void EXTI15_10_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line14) != RESET)
  {
    /* Clear the EXTI line 9 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line14);
  }
}
 
在中断处设置断点,
只要按下key,就进入中断,跑出中断,再按key,再次进入,屡试不爽,试验完成~~~
关键字:STM32  配置  PC13-PC15 引用地址:STM32配置PC13-PC15

上一篇:关于keil MDK 的配置文件Configuration Wizard
下一篇:STM32F10XXX 双通道ADC数据采集,TIM2触发采集

推荐阅读最新更新时间:2024-03-16 15:12

STM32数据手册开发实现按键输入功能
上一篇我们讲解了如何通过数据手册和库函数手册开发STM32的LED驱动(也就是通用GPIO的输出功能),今天我们讲解其输入功能实现。接上篇寄存器介绍(STM32根据数据手册完成LED驱动开发(寄存器版和库函数版介绍),GPIO有关寄存器有7个,本节用到端口配置低寄存器(因为根据电路原理图设计,用到引脚PC5),端口输入数据寄存器。 就开发驱动流程讲,先要看硬件电路接口,定义错了接口,啥功能都实现不了。根据硬件连接情况,我们分析并使用KEY0进行设计。KEY0 的一端接地,一端接单片机PC5引脚,表示我们的按键是按下采集低电平信号,也就是读取的数据是0。好,那么我们按照上节课讲解的八种工作模式,我们肯定是输入模式,但是是哪一种呢
[单片机]
<font color='red'>STM32</font>数据手册开发实现按键输入功能
STM32—TIMx输出PWM信号驱动MG996R舵机
一.前言 利用STM32的TIM3的通道1、通道2,输出俩路PWM信号,驱动MG996R舵机。 涉及到:TIM定时器基本原理,TIM定时中断、TIM输出PWM信号、MG996R舵机驱动原理 二.MG996R舵机简介 MG996R舵机单线驱动,是一款360°舵机,180°舵机与360°舵机的区别就是:180°舵机可以直接控制舵机旋转的角度,但舵机只能够旋转180°;360°舵机无法直接控制其旋转角度,只能控制其转动方向和速度。 舵机的驱动信号由周期为20ms的脉冲来控制: 当高电平持续时间为0.5~1.5ms时,舵机正转,时间越小转动越快 当高电平持续时间为1.5~2.5ms时,舵机反转,时间越大转动越快 当高电平持续时间为
[单片机]
<font color='red'>STM32</font>—TIMx输出PWM信号驱动MG996R舵机
STM32 JoystickMouse USB游戏杆鼠标的实现
本次程序的实现是基于上次CustomHID修稿过来的,工程的架构就不在介绍,这里主要介绍下,如何修改。 首先当然是usb_desc.c的一些描述符了。 设备描述符需要修改下bMaxPacketSize(最大包长度)为0x08个字节,因为该工程通讯的长度为4字节,根据USB洗衣规范,最大包长度只能是8、16、64等,所以这里选择0x08,这里要注意,改为0x08时,在usb_prop.c的DEVICE_PROP Device_Property- MaxPacketSize域也要改成0x08(我们在下面会说到),要跟配置描述符定义的最大包长度相同,否则,电脑上会出现:“此设备未识别”类似的提示。最好还要修改下厂商ID和产品ID两项
[单片机]
利用SPD实现嵌入式系统中内存的自动识别和配置
摘要:介绍了内存的SPD规范及其硬件接口类型和数据组织结构,实现了在嵌入式系统中对不同内存的识别与配置,提高了系统的稳定性,方便更换和检测。具体实例详细描述了嵌入式系统中内存的自动配置过程。 关键词:SPD I2C 嵌入式系统 MPC824X 在嵌入式系统设计中经常用大容量的SDRAM,存放RTOS和数据。这时用户可以有两种选择:一种是选用合适的内存芯片自己布线,把整个SDRAM做到嵌入式系统的PCB板上,这种方法在小系统中经常采用;另一种就是选用现成的内存条(如笔记本电脑上常用的DIMM内存),现成的内存条不仅容量大,而且由于用量大,价格也相对便宜。另外现成的内存条还节省了PCB布线空间,缩小嵌入式系统的内存体积,提高系统的
[应用]
STM32 HAL库学习系列番外第2篇---LL库定时器配置
cube配置与hal一样 LL库的封装没有HAL库的那么好,需要深入的看下参考手册 定时器启动及中断函数 voiduser_tim17Init() { LL_TIM_EnableIT_UPDATE(TIM17); LL_TIM_EnableCounter(TIM17); } voiduser_tim17IRQ() { if(LL_TIM_IsActiveFlag_UPDATE(TIM17)) { LL_TIM_ClearFlag_UPDATE(TIM17); } } 定时器PWM捕获功能 voiduser_dht11Init() { LL_TIM_EnableIT_CC1(TIM3);
[单片机]
STM32入门系列-启动文件介绍
在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从“复位”到“开始执行 main 函数”中间这段启动时间所必须进行的工作。它完成的具体工作有: 初始化堆栈指针SP=_initial_sp 初始化PC指针=Reset_Handler 初始化中断向量表 配置系统时钟 调用C库函数_main初始化用户堆栈,从而转向我们用户应用程序的main。 汇编指令 打开STM32的启动文件会发现,里面全部都是汇编语句,对于汇编指令不了解的朋友来说可能一头雾水。下面我们按照启动文件内指令出现的顺序来介绍,相信可以了解到大概情况。 EQU:给数字常量取一个符号名, 相当于C语言中的预处理命令define。其常用格式如下:
[单片机]
<font color='red'>STM32</font>入门系列-启动文件介绍
STM32意外复位问题调试
最近在使用STM32座项目时遇到一个奇怪的问题。系统一开始运行很正常但是在长时间运行之后会随机的出现STM2单片机无故产生复位的问题。因为在调试的过程中收获颇多,所以打算记录一下这一次的调试过程。 首先做问题分析,既然单片机在运行一段时间之后会产生复位。那具体是什么原因引起的单片机复位呢?拍脑子一想会不会是没有及时喂狗导致看门狗溢出引起的复位。为了证明这一点我们查询了stm32的数据手册有关于复位源的介绍 由上面的描述我们可以知道在RCC_CSR中记录了单片机复位的类型。因此我们只要在单片机启动时去读取该寄存器中的对应状态位即可判断出单片机上一次是因为何种原因产生复位的。注意:RCC_CSR寄存器是需要软件清除的。如
[单片机]
<font color='red'>STM32</font>意外复位问题调试
基于Linux的kfifo移植到STM32(支持os的互斥访问)
关于kfifo kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现;它提供一个无边界的字节流服务,最重要的一点是,它使用并行无锁编程技术,即当它用于只有一个入队线程和一个出队线程的场情时,两个线程可以并发操作,而不需要任何加锁行为,就可以保证kfifo的线程安全。 具体什么是环形缓冲区,请看我以前的文章 说明 关于kfifo的相关概念我不会介绍,有兴趣可以看他的相关文档,我只将其实现过程移植重写,移植到适用stm32开发板上,并且按照我个人习惯重新命名,RingBuff- 意为环形缓冲区 RingBuff_t 环形缓冲区的结构体成员变量,具体含义看注释。 buff
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php
设计资源 培训 开发板 精华推荐

Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved