stm32(3)学习UART接收发送/发送指令 |
您所在的位置:网站首页 › 发送终端 › stm32(3)学习UART接收发送/发送指令 |
一、uasrt 1.基础常识
开发板与电脑通信,在开发板上电时通过USART 发送一串字符串给电脑,然后开发板进入中断接收等待状态,如果电脑有发送数据过来,开发板就会产生中断,我们在中断服务函数接收数据,并马上把数据返回发送给电脑。 创建了两个文件:bsp_debug_usart.c 和bsp_debug_usart.h 文件用来存放USART 驱动程序及相关宏定义。 根据表20-3,我们选择usart1,用PA10,PA9作为复用引脚。 编程要点 使能RX 和TX 引脚GPIO 时钟和USART 时钟;初始化GPIO,并将GPIO 复用到USART 上;配置USART 参数;配置中断控制器并使能USART 接收中断;使能USART;在USART 接收中断服务函数实现数据接收和发送。
2.利用串口发送指令 如果用上面的工程,记得把中断全部注销了!!!中断的优先级比printf()高。 实现的功能是先打印出具体的要求,然后我输入一个字符,根据我的字符单片机做出相应的反应。 取而代之的是用C 语言标准库,fputc 函数是printf 函数内部的一个函数,功能是将字符ch 写入到 文件指针f 所指向文件的当前写指针位置,简单理解就是把字符写入到特定文件中。我们 使用USART 函数重新修改fputc 函数内容,达到类似“写入”的功能。 fgetc 函数与fputc 函数非常相似,实现字符读取功能。在使用scanf 函数时需要注意字 符输入格式。 ///重定向c库函数printf到串口,重定向后可使用printf函数 int fputc(int ch, FILE *f) { /* 发送一个字节数据到串口 */ USART_SendData(DEBUG_USART, (uint8_t) ch); /* 等待发送完毕 */ while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TXE) == RESET); return (ch); } ///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数 int fgetc(FILE *f) { /* 等待串口输入数据 */ while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) == RESET); return (int)USART_ReceiveData(DEBUG_USART); }main函数里面写打印的具体内容和判断字符后的具体操作。 static void Show_Message(void); /** * @brief 主函数 * @param 无 * @retval 无 */ int main(void) { char ch; /* 初始化RGB彩灯 */ LED_GPIO_Config(); /* 初始化USART 配置模式为 115200 8-N-1 */ USARTx_Config(); /* 打印指令输入提示信息 */ Show_Message(); while(1) { /* 获取字符指令 */ ch=getchar(); printf("接收到字符:%c\n",ch); /* 根据字符指令控制RGB彩灯颜色 */ switch(ch) { case '1': LED_RED; break; case '2': LED_GREEN; break; case '3': LED_BLUE; break; case '4': LED_YELLOW; break; case '5': LED_PURPLE; break; case '6': LED_CYAN; break; case '7': LED_WHITE; break; case '8': LED_RGBOFF; break; default: /* 如果不是指定指令字符,打印提示信息 */ Show_Message(); break; } } } /** * @brief 打印指令输入提示信息 * @param 无 * @retval 无 */ static void Show_Message(void) { printf("\r\n 这是一个通过串口通信指令控制RGB彩灯实验 \n"); printf("使用 USART1 参数为:%d 8-N-1 \n",USARTx_BAUDRATE); printf("开发板接到指令后控制RGB彩灯颜色,指令对应如下:\n"); printf(" 指令 ------ 彩灯颜色 \n"); printf(" 1 ------ 红 \n"); printf(" 2 ------ 绿 \n"); printf(" 3 ------ 蓝 \n"); printf(" 4 ------ 黄 \n"); printf(" 5 ------ 紫 \n"); printf(" 6 ------ 青 \n"); printf(" 7 ------ 白 \n"); printf(" 8 ------ 灭 \n"); } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |