Stm32学习笔记 联系客服

发布时间 : 星期二 文章Stm32学习笔记更新完毕开始阅读400d175752ea551810a68768

Stm32笔记:

1) 宏定义#define后面千万不要加“;”

2) delay_ms()需要delay_init()初始化否则会进入delay_ms()出不来;非常重要 3) 若jlink出现下载问题参照第5讲程序下载与仿真视频教程配置软件

4) 在按键实验中,加入一个key_up_test变量按键检测效果会好很多,分析原因 5) 信号分析窗口需要把debug设置use simulator而不是jlink,在setup中新建io口名字为

PORTB.5而不是GPIOB.5

6) 若jlink出现下载问题参照第5讲程序下载与仿真视频教程配置软件 7) Stm32寄存器地址映射:(举例)

#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define PERIPH_BASE ((uint32_t)0x40000000)

GPIOA 的寄存器的地址=GPIOA 基地址+寄存器相对 GPIOA 基地址的偏移值 结构体的一个特征,那就是结构体存储的成员他们的地址是连续的。 GPIOA->BSRR= 0x40000000+0x10000+0x0800+0x10=0x40010810

主函数中中断优先级分组NVIC_Configuration();的意思是先规定一下有几位抢占优先级几位响应优先级,然后再逐个设定每个中断的抢占优先级和响应优先级。例如NVIC_Configuration();的内部是NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 它的意思是设定两位抢占优先级和两位响应优先级,抢占优先级可以是0.1.2.3,响应优先级可以是0.1.2.3。

8)ADC1->SQR3这个寄存器就理解成:要是要进行3个通道(1,2,3)的转换,你想让3先转换,再是2再是1,那么在SQR3寄存器的最低五位放00011(3),次低5位放00010(2),再次低5位放00001(1),ADC会从最低五位放的那个通道数开始转换,以此类推

9),在用STM32驱动12864时发现PA口可以正常驱动而PB却不行,后经逐个测试发现PB3与PB4不可以拉低

关于STM32 PB3 PB4 如何设置成普通GPIO的配置

STM32的PB3、PB4,分别是JTAG的JTDO和NJTRST引脚,在没关闭JTAG功能之前,在程序中是配置不了这些引脚的功能的。

要配置这些引脚,首先要开启AFIO时钟,然后在AFIO的设置中,释放这些引脚。

具体看STM32的参考手册中有关AFIO的部分。

2010-12-10 10:56:45| 分类: STM32学习 | 标签:pb3 gpio jtag dp stm32 |举报|字号 订阅

对于初学习者来说为什么用到PB3和PB4时无法控制输出呢? 下面就这一问题进行分析讲解。 首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些 端口设置为普通I/O口。具体方法如下:

在GPIO_Configuration(); // 配置使用的 GPIO 口:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP) GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure);

注意:不要忘记在RCC_Configuration()中开启AFIO时钟, //AFIO时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);