这两天在玩oled屏,想用几个按键控制舵机,oled显示,于是把三个按键接到了PA13,14,15上发现没有任何反应后来一查手册发现有问题
可以看到PA13口的Main function是JTMS-SWDIO,不是PA13,所以要想使用PA13的普通IO口能力,就要先把IO口的复用功能打开,再把JTMS-SWDIO功能关掉就可以。
做输入,输出口都可以
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
再后来又发现了一个问题:就是单步调试的时候不能调试,出现***JLink Error: Can not read register 17 (MSP) while CPU is running,问题,后来想了一下,也实验了一下,发现是因为引脚复用的问题,因为之前把SWJ_JTAGDisable给使能了
关键字:stm32 普通IO口
引用地址:
stm32 的PA13,PA14, PA15做普通IO口的问题
推荐阅读最新更新时间:2024-03-16 16:13
STM32外部中断(EXTI)分析和应用
学过51单片机的外部中断的话入门会很快; 本篇博文基于STM32F103ZET6芯片,与大多数STM32F10x芯片兼容; 代码基于ST官网提供的3.5.0标准库 如有不足之处,还望前辈多多指教; 一些需要了解的基础知识 1. STM32每个GPIO口都可以作为外部中断输入口使用 2. 每个中断都设有状态位 3. 每个中断/事件都有独立的触发和屏蔽设置。 4. STM32103有19个外部中断(但是供GPIO口使用的中断只有16个) 分别是: 0~15:对应外部中断IO的输入中断 16 : 连接到PVD输出 17 :连接到RTC闹钟时间 18 :连接到USB唤醒事件 这里会容易出现一个问题说:STM32F103ZET6的GPIO管
[单片机]
网站虚拟主机+安信可A6C GPRS模块实现对stm32的远程升级
利用http协议使用普通的网站虚拟主机+安信可A6C GPRS模块实现对stm32的远程升级 步骤: 1.生成bin文件并将bin文件放到虚拟主机目录内 2.做一个php的页面分块读取该bin文件,以asc字符echo出来,并标记好头尾长度和校验。 3.GPRS协议栈连接主机路径,收到内容,将内容解析,校验,无误后保存到备份flash空间 4.全部保存完成后,做个标识在参数flash区,等待重新开机 5.做个bootloader,开机后检测是否有保存好的新版本号,如果有则覆盖旧版本,否则直接进入入口向量。 由于GPRS传输http协议的内容属于短连接,AT指令的情况多而复杂,很多需要判断处理,有较高的工作强度,这里的内容暂
[单片机]
STM32 BootLoader跳转APP跑飞 可能是因为找不到某些中断函数入口
在做嵌入式产品时,有时为方便更新设备程序(如远程更新或者只更新模块程序等原因),就要用到bootloader对设备进行必要的初始化,引导下载APP等。 STM官网下载的bootloader程序中并没有用到定时器等,很可能遇不到下面的问题。但是小猿猴如我等,会迫不及待的对其进行“魔改”,再经过二手三手,再加上运气不好,下面的问题就很容易暴露出来了: 现象: bootloader 下载并跳转某些 app 程序时,app运行正常; 对于某些app来说,却根本跑不起来; app本身运行没有问题; bootlaoder+app运行,J-Link在线仿真时,发现报硬件错误; 原因之一: bootloader 中开启了某些中断(并编写了中断
[单片机]
stm32 HardFault_Handler 异常的处理死机
在系统开发的时候,出现了HardFault_Handler硬件异常,也就是死机,尤其是对于调用了os的一系统,程序量大,检测堆栈溢出,以及数组溢出等,找了半天发现什么都没有的情况下,估计想死的心都有了。如果有些程序开始的时候一切没有问题,但是运行几个小时候,会发现死机了,搞个几天下来估计蛋都碎了一地吧。。。 一般来说运行操作系统 是以下几个问题 1.开始的时候给ucos分配的堆栈太小了,随着项目做多了,这类问题一般很容易解决 #define TASK_IO_SIZE 300 #define TASK_IO_PRIO 6 OS_STK TASK_IO_STK ; 比如修改300到 1000,做开发的时候 如果ram允许,尽量大些,免
[单片机]
STM32端口配置
1、上拉输入:上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同,没有什么严格区分。 2、下拉输入:就是把电压拉低,拉到GND。与上拉原理相似。 3、浮空输入:浮空(floating)就是逻辑器件的输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。 通俗讲就是让管脚什么都不接,浮空着。 4、模拟输入:模拟输入是指传统方式的输入。数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大
[单片机]
STM32入门编程总结2
上手思路,第一步先查芯片datasheet,一切以官网资料为准,可以在STM32 Cube MX软件里选择 ACCESS TO MCU SELECTOR ,在左上角输入 STM32F103C8后,点击 datasheet 自动打开 芯片手册,点击另存为保存到桌面慢慢看。1看封装,2看供电,3看GPIO,4看中断,FLASH大小+USART也瞅瞅看。建议先搜个官方开发板原理图混个脸熟,软件项目文件打开后先编译一遍能否 0 error (s) 0 warning(s)。 最小系统,3.3V供电电路(2.0-3.6V)+复位电路(低电平复位)+8M晶振 + 启动选择电路(BOOT0 、BOOT1)+调试下载SWD接口(PA13、PA
[单片机]
STM32重定向printf到串口
首先改写fputc()和fgetc()函数 //重定向c库printf函数到串口 int fputc(int ch, FILE *f) { //发送一个字节 USART_SendData(DEBUG_USART, (uint8_t)ch); //等待发送完成 while(USART_GetFlagStatus(DEBUG_USART,USART_FLAG_TXE) == RESET); return ch; } //重定向c库scanf函数到串口,重定向后可以使用scanf,getchar等函数 int fgetc(FILE *f) { //等待串口输入数据 while(USART_GetFla
[单片机]
stm32系统时钟配置问题
系统从上电复位到72mz配置好之前,提供时钟的是内如高速rc振荡器提供8MZ的频率,这个由下面void SystemInit (void)函数的前面的一部分代码来完成的和保证的: RCC- CR |= (uint32_t)0x00000001; #ifndef STM32F10X_CL RCC- CFGR &= (uint32_t)0xF8FF0000; #else RCC- CFGR &= (uint32_t)0xF0FF0000; #endif RCC- CR &= (uint32_t)0xFEF6FFFF; RCC- CR &= (uint32_t)0xFFFBFFFF;
[单片机]