STM32的打开IO口时钟啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32的打开IO口时钟啥意思相关的知识,希望对你有一定的参考价值。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
下面我明白是是对PA进行初始化,可上面那个打开是时钟什么意思?

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

你要知道为什么需要时钟。
单片机必须要有时钟才能正常运行,STM32有外部时钟和内部时钟的区别。但无论是外部还是内部时钟,都会经过分频或倍频最后得到外设的时钟,这样外设才能正常运行。而打开时钟就是允许接收分频后的频率。
比如外部时钟晶振你是8M,经过倍频后得到72M,然后可分频2、4、6、8……给ADC是使用,但是ADC最大运行频率为14M,所以分频数至少得设为6。这时你也要像你问的那样,打开ADC的时钟。
参考技术A 手册时钟部分有介绍:APB2外设时钟使能寄存器(RCC_APB2ENR)

位2
IOPAEN:IO端口A时钟使能
由软件置’1’或清’0’
0:IO端口A时钟关闭;
1:IO端口A时钟开启。
参考技术B 时钟系统是m3的一个特点,用户用到相应的外设,就可以将相应外设的时钟打开,这样可以节省芯片的耗电量,做到低功耗。

stm32板的usart2设置与usart1有啥区别啊

stm32板的usart2设置与usart1有什么区别啊,为什么我修改了时钟,I/O口后,还是不能使用,用的不是中断方式,是查询,因为要发送数据给PSC(舵机驱动板)

下图是STM32 101系列的总线图。下面以此为例分析其差异:

(若是其它系列需要参考其它系列的总线图)

其差异有:

    所连接的外部IO口不同。因此需要初始化的IO口是有差异的。同时需要注意的是你的硬件所用引脚是否连接到了正确的IO口上,而同一个USART可能有不同的IO口可以复用,因此需要注意USART和IO口之间的映射关系。

    所连接的总线不同,USART1连接到了APB2,而USART2连接到了APB1,因此,在初始化时钟时需要注意这方面。

参考技术A 过期的问题,还是来回答一下吧。

首先我的理解,你的问题应该是问usart2的编程设置。代码就不贴了,主要是说下思路和流程:
(1) RCC配置;
(2) GPIO配置;
(3)USART配置;
(4)NVIC配置;
(5)发送/接收数据。

在RCC配置中,除了常规的时钟设置以外,要记得打开USART相对应的IO口时钟,USART时钟,还有管脚功能复用时钟。
在GPIO配置中,将发送端的管脚配置为复用推挽输出,将接收端的管脚配置为浮空输入。
在USART的配置中,通过USART_InitTypeDef结构体对USART进行初始化操作,按照自己所需的功能配置好就可以了。
在NVIC的配置中,主要是USART2_IRQChannel的配置(类似USART1_IRQChannel的配置)。

全部配置好之后就可以开始发送/接收数据了。发送数据用USART_SendData()函数,接收数据用USART_ReceiveData()函数。

注意在对数据进行发送和接收的时候,要检查USART的状态,只有等到数据发送或接收完毕之后才能进行下一帧数据的发送或接收。采用USART_GetFlagStatus()函数。 同时还要注意的是,在发送数据的最开始,需要清除一下USART的标志位,否则,第1位数据会丢失。因为在硬件复位之后,USART的状态位TC是置位的。当包含有数据的一帧发送完成之后,由硬件将该位置位。只要当USART的状态位TC是置位的时候,就可以进行数据的发送。然后TC位的置零则是通过软件序列来清除的,具体的步骤是“先读USART_SR,然后写入USART_DR”,只有这样才能够清除标志位TC,但是在发送第一帧数据的时候,并没有进行读USART_SR的操作,而是直接进行写操作,因此TC标志位并没有清空,那么,当发送第一帧数据,然后用USART_GetFlagStatus()检测状态时返回的是已经发送完毕(因为TC位是置1的),所以程序会马上发送下一帧数据,那么这样,第一帧数据就被第二帧数据给覆盖了,所以看不到第一帧数据的发送。

好了,stm32总体上来说,使用很广,基本上问题都被发现和解决,例程也是很多,找到可用的例程,然后做改动,基本没有大问题。
参考技术B 在uart功能上是没有区别的哦,就是两个口罢了,便于使用,比如你想与别的设备进行串口通信的同时还想通过串口调试设备,这时就必须要两个串口滴! 参考技术C 没什么区别
设置的话,把GPIO对应IO口复用初始更改,CLK时钟使能更改,其他的都一样,GPIO模式和USART模式都一样
参考技术D usart1 是用系统频率分的.(系统频率可倍频)。usart2是用晶振频率分的。基他就没什么使用区别了

以上是关于STM32的打开IO口时钟啥意思的主要内容,如果未能解决你的问题,请参考以下文章

"stm32的AFIO"是啥意思?

stm32晶振旁路 啥意思

stm32板的usart2设置与usart1有啥区别啊

stm32读取gpio高低电平速度

STM32学习系列之USART/UART

STM32 --- 什么时候打开复用IO的时钟(比如RCC_APB2Periph_AFIO)