在STM32开发中,串口是咱们最常用的接口。经过串口,咱们很便利地把数据输出到电脑,便利咱们进行程序调试。下面咱们来看看STM32的串口通讯代码。
要完结串口通讯,咱们要进行下面几个过程:
首要:要翻开GPIO口的时钟和串口模块时钟。在圆点博士小四轴中,咱们用的是GPIOA和COM1模块。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
其次:要指定GPIO口,即确认哪些IO是用于串口通讯的。记住运用GPIO_Mode_AF_PP形式
GPIO_InitStructure.GPIO_Pin = BS004_COM1_TX;//圆点博士:设置PA9管脚为串口TX
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //圆点博士:设置串口TX最大答应输出速度
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //圆点博士:设置串口TX为输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
//
GPIO_InitStructure.GPIO_Pin = BS004_COM1_RX;//圆点博士:设置PA9管脚为串口RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //圆点博士:设置串口RX为输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
第三步:设置串口模块参数,如波特率,奇偶校验这些。
USART_InitStructure.USART_BaudRate = 115200;//圆点博士:设置串口波特率为115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //圆点博士:设置串口数据长度为8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //圆点博士:设置串口中止位长度为1位
USART_InitStructure.USART_Parity = USART_Parity_No ;//圆点博士:设置串口奇偶校验为无
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //圆点博士:设置串口数据流控制为无
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//圆点博士:设置串口为发送和接纳形式
USART_Init(USART1, &USART_InitStructure);//圆点博士:设置串口参数
第四步:假如运用串口中止的话,还要设置中止优先级。下面比如设置为最高优先级0。
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
最终一步,便是翻开中止,并使能串口模块拉。
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//圆点博士:答应接纳中止
USART_Cmd(USART1, ENABLE);
上面比如只启动了接纳中止。这样,当STM32串口接纳到数据的时分,代码就会主动跳转到中止代码里边履行对应的操作。
那么,关于发送,怎么办呢? 咱们选用查询的办法来发送。
void BS004_COM1_Send_Char(unsigned char ascii_code) //圆点博士:发送一个字符
{
USART_SendData(USART1,ascii_code);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}//圆点博士:等候直到发送完结
}
如过要发送单字符,运用下面的办法:
BS004_COM1_Send_Char(/);//圆点博士:发送字符/
BS004_COM1_Send_Char(13);//圆点博士:发送回车字符
如过要发送字符串,则运用下面的办法。
void BS004_COM1_Send_Str_Body(unsigned char* str_buf)//圆点博士:发送一个指定长度的字符串
{
unsigned char i,str_len;
str_len=0;
for(i=0;i<64;i++)
{
str_len++;
if(str_buf[i]==.) break;
}
for(i=0;i
}
在上面的比如中,运用了符号.作为字符串完毕标志。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/260446.html