本文通过介绍意法半导体MCUSTM32主要的底层配置,通过关键步骤的程序源代码的介绍,阐述实现数据传输的细节以及注意事项。该方法对其他项目或芯片有一定的实现价值和参考价值,且简单可靠,具有普遍性和通用性。
1、STM32底层配置
为了实现STM32单片机与SIM900A模块之间的数据命令的传输,本文以串口为例,先搭建开发平台,在工程中加入相应的库函数以及配置文件,然后配置时钟以及串口相应的输入输出GPIO接口。在配置的同时,需要针对自身的原理图进行编写,才能保证配置正确无误。这样基本的开发平台就搭建起来了。
1.1、串口配置
在开发平台搭建起来之后,就可以对串口进行配置了。配置速率为115200b/s,字长为8bit,1bit停止位,串口模式为输入与输出模式,最后初始化相对应的串口。初始化串口之后,打开串口的中断响应函数,即USART_ITConfig(USART2,USART_IT_RXNE,ENABLE)(以串口2为例),然后使能相对应的串口,这样串口函数就基本配置完成了。需要注意一点,有些程序可能在传输的时候出现首位丢失。这个问题涉及到USART的机制。硬件复位之后,USART的状态位是置位的(置1,表示已经发送完毕),而此时数据可以进行正常发送。当一帧数据发送后,由硬件将该位置位。而清除TC位(置0)是由软件来完成的,通过先读USART_SR,再写USART_DR将该位清除。但是程序在发送第一帧数据的时候,并没有进行读USART_SR,而是直接进行写USART_DR,因此TC标志位还是置1,并没有清除。当发送第一帧数据之后,用USART_GetFlagStatus()检测状态返回的是已经发送完毕,程序就会马上发送下一帧数据,因此第一帧数据就会被第二帧数据覆盖了,这样就看不到首位数据。根据这种情况来说可以在每次传输之前或之后清除传输完成标志位,即USART_ClearFlag(USART2,USART_FLAG_TC)。
1.2、中断配置
配置完串口之后,将对NVIC进行配置。首次配置中断分组,然后选择串口的中断,即NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn(以所使用固件库的定义为主)。
再设置抢占式中断优先级和响应式中断优先级,然后使能中断和初始化。以上的配置必须结合自身的情况,设计出最优的中断分组和优先级,以保证程序响应中断的速度。中断后所做的内容在stm32f10x_it.c文件里配置。 |