stm32板的usart2设置与usart1有什么区别啊
stm32板的usart2设置与usart1有什么区别啊,为什么我修改了时钟,I/O口后,还是不能使用,用的不是中断方式,是查询,因为要发送数据给PSC(舵机驱动板)...
stm32板的usart2设置与usart1有什么区别啊,为什么我修改了时钟,I/O口后,还是不能使用,用的不是中断方式,是查询,因为要发送数据给PSC(舵机驱动板)
展开
8个回答
展开全部
下图是STM32 101系列的总线图。下面以此为例分析其差异:
(若是其它系列需要参考其它系列的总线图)
其差异有:
所连接的外部IO口不同。因此需要初始化的IO口是有差异的。同时需要注意的是你的硬件所用引脚是否连接到了正确的IO口上,而同一个USART可能有不同的IO口可以复用,因此需要注意USART和IO口之间的映射关系。
所连接的总线不同,USART1连接到了APB2,而USART2连接到了APB1,因此,在初始化时钟时需要注意这方面。
展开全部
过期的问题,还是来回答一下吧。
首先我的理解,你的问题应该是问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总体上来说,使用很广,基本上问题都被发现和解决,例程也是很多,找到可用的例程,然后做改动,基本没有大问题。
首先我的理解,你的问题应该是问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总体上来说,使用很广,基本上问题都被发现和解决,例程也是很多,找到可用的例程,然后做改动,基本没有大问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在uart功能上是没有区别的哦,就是两个口罢了,便于使用,比如你想与别的设备进行串口通信的同时还想通过串口调试设备,这时就必须要两个串口滴!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没什么区别
设置的话,把GPIO对应IO口复用初始更改,CLK时钟使能更改,其他的都一样,GPIO模式和USART模式都一样
设置的话,把GPIO对应IO口复用初始更改,CLK时钟使能更改,其他的都一样,GPIO模式和USART模式都一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
usart1 是用系统频率分的.(系统频率可倍频)。usart2是用晶振频率分的。基他就没什么使用区别了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询