查看牛客板卡的用户手册《STM32 Nucleo-64 boards》,找到下图:
(3)在库中找到USART干系的接口。

先确定要调试功能:
打开GPIO时钟和USART1时钟,选择时钟源,配置复用IO模式:
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); //GPIO时钟使能函数
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); //USART1时钟使能函数
void RCC_USARTCLKConfig(uint32_t RCC_USARTCLK);//USART1时钟源选择函数
void GPIO_PinAFConfig(GPIO_TypeDef GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);//IO口复用配置函数。
配置GPIO口:
void GPIO_Init(GPIO_TypeDef GPIOx, GPIO_InitTypeDef GPIO_InitStruct)
USART初始化并启动USART通信:
void USART_Init(USART_TypeDef USARTx, USART_InitTypeDef USART_InitStruct);//USART初始化函数
void USART_Cmd(USART_TypeDef USARTx, FunctionalState NewState);//USART使能函数
void USART_ClearFlag(USART_TypeDef USARTx, uint32_t USART_FLAG);//USART清标志函数
配置中断:
对付USART的吸收功能来说,可以利用两种办法,分别是循环检测吸收办法和中断办法吸收数据,前一种办法会壅塞占用MCU,导致效率低下,而中断办法吸收数据则不会壅塞,以是这里利用中断办法吸收数据。
void USART_ITConfig(USART_TypeDef USARTx, uint32_t USART_IT, FunctionalState NewState);//USART中断使能函数
void NVIC_Init(NVIC_InitTypeDef NVIC_InitStruct);//嵌套向量中断掌握器初始化配置函数
吸收和发送数据:
FlagStatus USART_GetFlagStatus(USART_TypeDef USARTx, uint32_t USART_FLAG);//获取USART状态标识函数
uint16_t USART_ReceiveData(USART_TypeDef USARTx);//USART读取数据函数
void USART_SendData(USART_TypeDef USARTx, uint16_t Data);//USART发送数据函数
那么这么多函数是从哪里找的呢??答案是,在keil上搜索得到的,以是这种开拓的办法便是,当调试某个功能时,找到与之干系的文件比如:stm32f0xx_usart.c和stm32f0xx_usart.h文件,其由于GPIO干系,又去找stm32f0xx_gpio.c和stm32f0xx_gpio.h文件,其时钟还与RCC干系,就去找stm32f0xx_rcc.c和stm32f0xx_rcc.h文件,又还与NVIC干系,以是又去找stm32f0xx_misc.c和stm32f0xx_misc.h文件。总之便是一句话,它须要什么就给它什么。
还有个问题便是,你咋知道先配置什么,再配置什么的???答案是:实在我也不知道,是参考手册或者编程手册见告我的,比如下图:
图已经见告咱数据是怎么传输的了,该当配置啥寄存器等等,那咱不便是知道怎么配置了么》??便是这样的。
(4)配上COMS电平转TTL电平的模块,比如MAX232,MAX3232,RS232,PL2303等。与PC机连接通信。
我用的便是上图这种模块了,连接是:
MCU_Tx---------模块Rx
MCU_Rx---------模块Tx
然后就与PC机连接,再连上串口调试助手。
OK!到这里就还有一点要讲的了!那便是波特率,实在便是单片机或打算机串口通信时的速率。其实在手册当中也给咱讲的一目了然了,
人家讲的很清楚,还给咱举了例子,如何打算,如何配置。实在如上图的打算过程只是对付玩操作寄存器的人才须要考虑的打算,如果直接用库函数开拓,直接指定波特率就好了。
还有便是,普通的通信该当配置成什么呢???三个字“8N1,无奇偶”,啥意思呢??8个数据为,无流控,1个停滞位,无奇偶校验,便是这么大略。
且看库的配置构造体:
指定波特率,设置数据位长度8位,1个停滞位,无奇偶校验,输入和输出模式,无流控。如下图:
详细初始化如下:
USART初始化:
NVIC初始化:
初始化就如上了。
那么,咱要发送数据哇!以是,咋就写写:
发送一个字节:
发送字符串:
发送十进制数据:
OK!发送的便是这样,没什么好阐明的!哈哈!
但是,如果用来进行调试的话,以上方法彷佛不太给力哦,为毛呢??比如所咱想发送字符串和数据殽杂呢》》按照上面的方法,那可得写好几句打印函数呢!嘿嘿!那咱就把ANSI标准C的printf移植过来用吧!肿么玩呢??实在,两步就好:
(1)包含头文件#include
(2)如下图:
这几个意思呢??而且,明眼人一看就能瞥见,在咱的工程中,压根就没有调用int fputc(int ch, FILE f)这个函数,只是写在那里了而已,哈哈!实在呢,int fputc(int ch, FILE f)函数是printf函数开放的一个从硬件读取数据的接口,那么在哪里调用呢??肯定在C标志库调用啦!只是咱看不到罢了。以是,不用管它,写上就好!哈哈!
这样,咱就能在工程中直策应用printf函数了,至于怎么利用,不会的话,自己好好的去学习C吧。
发送数据讲完了,咱就说说吸收数据了,我在这里就大略的表示一下,详细的还要看实际运用的须要修正。
首先咱得找到stm32f0xx_it.c文件,然后再文件中任意位置写函数
void USART1_IRQHandler(void)
{
}
那么这个函数名从哪来的呢??又是干啥的呢??
还记得前面提到的在启动文件建立的中断向量表吗?打开startup_stm32f030.s文件,中断向量表如下:
没错,当发生中断时,MCU会:
(1)将现有数据保存在相应寄存器中,即保存现场
(2)跳转到中断向量表中查询发生中断的外设,并找到中断入口地址
(3)实行中断功能
(4)跳出中断,从相应寄存器中读取数据,即规复现场
中断的过程便是上面这几个了,那么void USART1_IRQHandler(void)函数便是USART1的中断入口地址了,便是这么大略。再多说一点便是,有些人说,瞥见别人在函数的任意位置填写任意的函数,他就直接成了中断函数了,为毛这里要有ST规定了名字啊???实在我想说,只要你愉快,想怎么样都可以;首先,void USART1_IRQHandler(void)函数可以存在于工程中的任意C文件,再便是,如果想自己命名,那就修正一下中断向量表的名字为你想要的名字即可,只要你愉快。
OK!实现就如下图了:
上图首先检测USART1读标志,然后读取数据,再然后将其打印出来个咱看,数据是否发送成功。然后情形标志位。在这里只是验证通信的成功。
以是当我们从串口调试助手发送数据后,发送的数据有会在串口调试助手上面打印出来,有点像回显。哈哈!便是这么大略了!
详细的主程序调用如下:
很大略!一贯在输出!哈哈!OK了!
这些只是个人调试和理解,如若有误,请包涵!
嵌入式物联网须要学的东西真的非常多,千万不要学错了路线和内容,导致人为要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!
某鱼上买估计至少要好几十。
扫码进群领资料








