‘壹’ 请问如何写单片机的库函数
你说的是3.0以上的固件库吗?
systeminit()函数在主程序中被rcc_configuration()函数调用,完成系统时钟的配置功能。我看过这个函数的具体内容,是直接操作寄存器来完成配置。如果使用stm32f10x_rcc.c文件中的函数来完成时钟配置,和systeminit()的顺序和效果一样。
当然,为了保证兼容性,使低版本固件库写的程序运行,就还有stm32f10x_rcc.c存在,像早期版本的rcc_configuration()函数就是使用这个文件中提供的函数来完成时钟配置的。
补充:是的,systeminit()函数完成了时钟初始化的功能。另外systick的使用也变简单了,以前要几个函数完成初始化,现在只要一个就行。
你看看3.0版本固件system_stm32f10x.c中的代码是怎样的吧。其中是对rcc寄存器直接赋值操作,和stm32f10x_rcc.c中相关的函数作用一样。
如果在程序中要使用端口、外设等,由于这些东西需要时钟才能工作,所以还是需要stm32f10x_rcc.c中的函数来完成时钟的控制。
‘贰’ stm32配置 RCC->CR=0x0000000; RCC->CFGR=0x00000000; 我配置了之后 芯片依然啊工作的哦
先调用SystemInit函数来初始化单片机,就是设置单片机的始终,然后调用mian主函数正式开始你编写的程序。
‘叁’ 请问STM32程序中的这几个头文件,各有什么作用
都是.c文件,不是头文件啊。stm32f10x_it.c 中断处理函数都放在这个文件里面。main.c 这个不用解释了吧stm32f10x.h 这个是头文件,它包含了stm32的一些常用宏,寄存器结构体的定义,高版本的库还放着中断向量表。stm32f10x_rcc.c 这个文件里的固件函数包含了一些对复位、时钟的控制的函数stm32f10x_gpio.c这个文件里的固件函数包含了对GPIO的操作函数stm32_eval.c 这个是st公司为其制作的评估板写的程序system_stm32f10x.c主要包含了对系统时钟设置,一般是对倍频时钟的设置 具体可以看一下文件内容啊,呵呵 欢迎追问 追问: 您好,非常感谢您!我是刚刚学习STM32。我还有几个问题。
三、GPIO_InitTypeDef GPIO_InitStructure;
ErrorStatus HSEStartUpStatus;
u8 count=0;
四、void Delay(vu32 nCount);
希望您能帮助我,我会给您高分的。 回答: 1、因为引脚本来就是16个的啊,从pin0~pin15,GPIOA口有16个脚,GPIOB也有16个,GPIOC也有16个,是这样区分的,它是相对于一组io口的细分,ALL来代替的是选中了这一组io 2、不可以,呵呵你要选择到底是GPIOA还是GPIOB还是...C还是...D等等的GPIO_Pin_03、GPIO_InitTypeDef、ErrorStatus是两个结构体,u8是定义的unsigned char你可以通过keil的go to definition选项找到它们的定义,这个是标准C的定义 4、不是,这两个是函数。你的C语言基础太差,估计很多都看不懂吧,呵呵,建议先补习一下C语言 欢迎追问 追问: 嗯,是的C语言基础不太好,以前学单片机主要是用汇编。
‘肆’ 求解,关于stm32单片机的io口使能,为什么我看视频教程的时候没有设置使能,就能使用io口,但是
开启GPIO时钟就行了
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
这是调用的库函数 stm32f10x_rcc.c中有
看这个函数(用户函数)里有这一句:
void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启LED的外设时钟*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
/*选择要控制的GPIOB引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*调用库函数,初始化GPIOB0*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*选择要控制的引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* 关闭所有led灯 */
GPIO_SetBits(GPIOB, GPIO_Pin_0);
/* 关闭所有led灯 */
GPIO_SetBits(GPIOC, GPIO_Pin_4|GPIO_Pin_3);
}
‘伍’ rcc-csr单片机csr是什么意思
ADC_CSR是一个变量名0x03表示十六进制的03,0x为十六进制的标志ADC_CSR=0x03就表示将十六进制的03赋值给变量ADC_CSR
‘陆’ 32位单片机中按下按键之后灯闪烁的rcc函数是哪个
闪烁一般是要延时的。 空指令。TIM。systick。PWM. DAC都行。
‘柒’ STM32单片机中RCC_APB2PeriphClockCmd的作用是设置时钟但是是设置什么时钟,其中的参数是什么
void RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
1、第一个参数选外设端口。
2、第二个选enable or disable。
3、直接看库源文件STM32F10x_StdPeriph_Driversrcstm32f10x_rcc.c,1090行,已经写明了可用的参数。
(7)单片机rcc扩展阅读:
STM32的使用原理:
除新增的功能强化型外设接口外,STM32互连系列还提供与其它STM32微控制器相同的标准接口,这种外设共用性提升了整个产品家族的应用灵活性,使开发人员可以在多个设计中重复使用同一个软件。新ST的M32的标准外设包括10个定时器、两个12位1-Msample/s 模数转换器 (交错模式下2-Msample/s)、两个12位数模转换器、两个I2C接口、五个USART接口和三个SPI端口。
新产品外设共有12条DMA通道,还有一个CRC计算单元,像其它STM32微控制器一样,支持96位唯一标识码。低功耗模式共有四种,可将电流消耗降至两微安。从低功耗模式快速启动也同样节省电能;启动电路使用STM32内部生成的8MHz信号,将微控制器从停止模式唤醒用时小于6微秒。
‘捌’ STM32 RCC系统初始化失败 单片机跑不起来
/* Flash 2 wait state */
//FLASH_SetLatency(FLASH_Latency_2);
/* Enable Prefetch Buffer */
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
不能被注释掉,这是在配置flash的等待周期,48 MHz < SYSCLK ≤ 72 MHz
时是需要有两个等待周期得,否则flash有可能进入写保护,详细请看St的STM32F10xxx Flash programming这个文档,其中FLASH_ACR寄存器的最低3位就是配置等待周期的,这是必须要配的
或者你直接调用Systeminit就不用自己配时钟了
‘玖’ 什么时候需要用到RCC
需要用到外设的重映射功能时才需要使能AFIO的时钟
外部中断(EXTI)中与AFIO有关的寄存器是AFIO-EXTICR1、2、3,它们是用来选择EXTIx外部中断的输入脚之用
‘拾’ 【ARM】RCC->APB2ENR|=1<<5; //使能PORTD时钟 RCC->APB2ENR=1<<5; 以上两句代码效果差别是什么
这基本上有两个答题方向, 端看问题人想要知道的是什么.
语法
在语法上, = 与 |= 是不同概念.
a = 2 ; // a变数为2
a |= 2 ; // 等同于 a = (a | 2); 只有a=0时, a才会是2
OR语法若不清楚, 网路上很容易查到Digital Logic方面的介绍.
单片机功能
RCC->APB2ENR, 指的是APB2(第二组Peripheral Bus)各区块IP的Clock使能或禁能.
在语法上的作用同前,
(1) = 1<<5 ; // 将APB2ENR这一rigister内容设定为(1<<5), 也就是只有bit5代表的硬件使能生效.
(2) |= 1<<5 ; // 将APB2ENR这一rigister内容OR(1<<5), 也就是除原有硬件使用设定外, 额外增加bit5代表的硬件, 可以工作.
由于题目没有列出单片机的型别, 各家也不一样, 这边引用STM32F1的某型号,
当使用 ( = 1<<5) 此APB2 bus上仅有PORTD有效;
当使用 ( |= 1<,5) 此APB2 bus上, 原有设定不变, 额外增加使能PORTD.