完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
1个回答
|
|
|
串口是STM32最为重要的资源,在平时的硬件调试和软件调试中都是不可或缺的工具,最近在测试一块板子的通信功能是否正常,我打算用板子A的串口USART1一直向串口发送数据,用板子B的串口1接收数据,并将接收到的数据经过处理后显示在LCD液晶上。 所以就写了下面的串口发送程序,发送的是数组函数。
Main.c #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" u8 USART_fasong_Buf[8]={12,35,00,12,12,34,90,00}; // 接收缓冲区字节长度200 //u16 res=9; void USART1_Send_Data(u8 *buf,u8 len); /*************************方法2******************* void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...); *********************************************/ int main(void) { delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化 KEY_Init(); //初始化与按键连接的硬件接口 while(1) { USART1_Send_Data(USART_fasong_Buf,8); delay_ms(1000); /***********************方法2**************/ // USART_OUT(USART1,"12"); // USART_OUT(USART1,"* STM32F103-USART1串口一直发送数据*rn"); // USART_OUT(USART1,"1234567890rn"); // USART_OUT(USART1,"fufufufu1019rn"); // USART_OUT(USART1,"rn"); // USART_OUT(USART1,"rn"); } } void USART1_Send_Data(u8 *buf,u8 len) //发送数据函数,带发送长度 { u8 t; for(t=0;t while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); USART_SendData(USART1,buf[t]); } while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } Usart.c char *itoa(int value, char *string, int radix); typedef struct __va_list { void *__ap; } va_list; /**************************************************************************** * 名 称:void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...) * 功 能:格式化串口输出函数 * 入口参数:USARTx: 指定串口 Data: 发送数组 ...: 不定参数 * 出口参数:无 * 说 明:格式化串口输出函数 "r" 回车符 USART_OUT(USART1, "abcdefgr") "n" 换行符 USART_OUT(USART1, "abcdefgrn") "%s" 字符串 USART_OUT(USART1, "字符串是:%s","abcdefg") "%d" 十进制 USART_OUT(USART1, "a=%d",10) * 调用方法:无 ****************************************************************************/ void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...) { const char *s; int d; char buf[16]; va_list ap; va_start(ap, Data); while(*Data!=0){ //判断是否到达字符串结束符 if(*Data==0x5c){ //'' switch (*++Data){ case 'r': //回车符 USART_SendData(USARTx, 0x0d); Data++; break; case 'n': //换行符 USART_SendData(USARTx, 0x0a); Data++; break; default: Data++; break; } } else if(*Data=='%'){ // switch (*++Data){ case 's': //字符串 s = va_arg(ap, const char *); for ( ; *s; s++) { USART_SendData(USARTx,*s); while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET); } Data++; break; case 'd': //十进制 d = va_arg(ap, int); itoa(d, buf, 10); for (s = buf; *s; s++) { USART_SendData(USARTx,*s); while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET); } Data++; break; default: Data++; break; } } else USART_SendData(USARTx, *Data++); while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET); } } /****************************************************** 整形数据转字符串函数 char *itoa(int value, char *string, int radix) radix=10 标示是10进制 非十进制,转换结果为0; 例:d=-379; 执行 itoa(d, buf, 10); 后 buf="-379" **********************************************************/ char *itoa(int value, char *string, int radix) { int i, d; int flag = 0; char *ptr = string; /* This implementation only works for decimal numbers. */ if (radix != 10) { *ptr = 0; return string; } if (!value) { *ptr++ = 0x30; *ptr = 0; return string; } /* if this is a negative value insert the minus sign. */ if (value < 0) { *ptr++ = '-'; /* Make the value positive. */ value *= -1; } for (i = 10000; i > 0; i /= 10) { d = value / i; if (d || flag) { *ptr++ = (char)(d + 0x30); value -= (d * i); flag = 1; } } /* Null terminate the string. */ *ptr = 0; return string; } /* NCL_Itoa */ |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4130 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3221 浏览 1 评论
2747 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2175 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14939 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3084浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1894浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2064浏览 3评论
1976浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2166浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:34 , Processed in 0.611574 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1133