Stm32学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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);