OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17944|回复: 18

分享一个STM8L152C6的串口调试程序

[复制链接]

55

主题

1231

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2624
金钱
2624
注册时间
2014-2-13
在线时间
514 小时
发表于 2015-9-30 09:06:28 | 显示全部楼层 |阅读模式
因项目需求,前段时间供应商给了一块STM8L152C6的discovery板子,拿来鼓捣,顺便做项目,这里分享一个UASRT的测试程序
PS:基本上芯片的外设都用了,有空继续分享
下面贴代码,编译平台为IAR FOR STM8
[mw_shl_code=c,true]#include "uart1.h" void Uart1_Init(void) { CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE); GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);//TXD GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_In_PU_No_IT);//RXD USART_DeInit(USART1); //复位UART1 /* * 将UART1配置为: * 波特率 = 115200 * 数据位 = 8 * 1位停止位 * 无校验位 * 使能接收和发送 */ USART_Init(USART1, (u32)115200, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No, USART_Mode_Tx|USART_Mode_Rx); USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断 //USART_ITConfig(USART1, USART_IT_TC, ENABLE);//开启接收中断 USART_Cmd(USART1, ENABLE); //使能UART2 } /******************************************************************************* * 名称: UART1_SendByte * 功能: UART1发送一个字节 * 形参: data -> 要发送的字节 * 返回: 无 * 说明: 无 ******************************************************************************/ void UART1_SendByte(u8 data) { USART_SendData8(USART1, data); /* 等待传输结束 */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } /******************************************************************************* * 名称: UART1_SendStr * 功能: UART1发送len个字符 * 形参: data -> 指向要发送的字符串 * len -> 要发送的字节数 * 返回: 无 * 说明: 无 ******************************************************************************/ void UART1_SendStr(u8 *str) { while(*str != '\0') { UART1_SendByte(*str++); /* 循环调用发送一个字符函数 */ } } /******************************************************************************* * 名称: UART2_ReceiveByte * 功能: UART2接收一个字符 * 形参: 无 * 返回: 接收到的字符 * 说明: 无 ******************************************************************************/ u8 UART1_ReceiveByte(void) { u8 UART1_RX_BUF; /* 等待接收完成 */ while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); UART1_RX_BUF = USART_ReceiveData8(USART1); return UART1_RX_BUF; } /******************************************************************************* * 名称: fputc * 功能: 重定向c库函数printf到UART1 * 形参: 无 * 返回: 要打印的字符 * 说明: 由printf调用 ******************************************************************************/ #ifdef _IAR_ int fputc(int ch, FILE *f) { /* 将Printf内容发往串口 */      UART1_SendByte(ch); return (ch); } #else PUTCHAR_PROTOTYPE { /* Write a character to the UART1 */ UART1_SendByte(c); return (c); } #endif GETCHAR_PROTOTYPE { #ifdef _COSMIC_ char c = 0; #else int c = 0; #endif /* Loop until the Read data register flag is SET */ while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); c = USART_ReceiveData8(USART1); return (c); } /******************************************************** * 函数名:itoa * 描述 :将整形数据转换成字符串 * 输入 :-radix =10 表示10进制,其他结果为0 * -value 要转换的整形数 * -buf 转换后的字符串 * -radix = 10 * 输出 :无 * 返回 :无 * 调用 :被USART1_printf()调用 *******************************************************/ static 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 */ /************************************************************************ * 函数名:UART1_printf * 描述 :格式化输出,类似于C库中的printf,但这里没有用到C库 * 输入 :-UARTx 串口通道,这里只用到了串口1,即UART1 * -Data 要发送到串口的内容的指针 * -... 其他参数 * 输出 :无 * 返回 :无 * 调用 :外部调用 * 典型应用 UART1_printf( "\r\n this is a demo \r\n" ); * UART1_printf( "\r\n %d \r\n", i ); * UART1_printf( "\r\n %s \r\n", j ); ***************************************************************************/ void UART1_printf(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_SendData8(USART1, 0x0d); Data ++; break; case 'n': //换行符 USART_SendData8(USART1, 0x0a); Data ++; break; default: Data ++; break; } } else if ( *Data == '%') { // switch ( *++Data ) { case 's': //字符串 s = va_arg(ap, const char *); for ( ; *s; s++) { USART_SendData8(USART1, *s); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } Data++; break; case 'd': //十进制 d = va_arg(ap, int); itoa(d, buf, 10); for (s = buf; *s; s++) { USART_SendData8(USART1, *s); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } Data++; break; default: Data++; break; } } /* end of else if */ else USART_SendData8(USART1, *Data++); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } } [/mw_shl_code]

STM8L_UART1(基于库).zip

741.95 KB, 下载次数: 21137

技术交流,Sell 中颖单片机,欢迎私信骚扰
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-9-30 17:00:11 | 显示全部楼层
牛叉牛叉。。。


谢谢分享!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-9-30 21:52:32 | 显示全部楼层
谢谢分享.....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2011-4-13
在线时间
9 小时
发表于 2015-10-15 22:49:59 | 显示全部楼层
谢谢LZ分享
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-6-26
在线时间
2 小时
发表于 2015-10-23 10:18:18 | 显示全部楼层
楼主你好, 想跟你探讨点东西, 可以加一下QQ吗,我的750612237
回复 支持 反对

使用道具 举报

55

主题

1231

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2624
金钱
2624
注册时间
2014-2-13
在线时间
514 小时
 楼主| 发表于 2015-10-23 10:22:44 | 显示全部楼层
回复【5楼】hailian27:
---------------------------------
可以跟帖回复,共同交流
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复 支持 反对

使用道具 举报

0

主题

23

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4190
金钱
4190
注册时间
2013-10-5
在线时间
403 小时
发表于 2016-7-14 15:01:08 | 显示全部楼层
才看到,谢谢
回复 支持 反对

使用道具 举报

电子技术我爱 该用户已被删除
发表于 2016-8-12 14:25:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

电子技术我爱 该用户已被删除
发表于 2016-8-12 14:31:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

55

主题

1231

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2624
金钱
2624
注册时间
2014-2-13
在线时间
514 小时
 楼主| 发表于 2016-8-13 08:56:09 | 显示全部楼层
电子技术我爱 发表于 2016-8-12 14:31
通过查看程序好像是进入了 串口发送完成中断以后不退出了

你把整个代码copy过去看看
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复 支持 反对

使用道具 举报

18

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2015-9-15
在线时间
98 小时
发表于 2016-9-19 14:18:48 | 显示全部楼层
你好。请问,我discorvery板子连接上电脑。串口助手搜索不到
回复 支持 反对

使用道具 举报

电子技术我爱 该用户已被删除
发表于 2017-3-1 14:09:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-1-15
在线时间
3 小时
发表于 2017-6-14 09:43:50 | 显示全部楼层
非常感谢分享,省去不少时间!
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-6-14
在线时间
5 小时
发表于 2017-6-26 15:09:49 | 显示全部楼层
谢谢分享,STM8S003看看能不能用啊
回复 支持 反对

使用道具 举报

55

主题

1231

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2624
金钱
2624
注册时间
2014-2-13
在线时间
514 小时
 楼主| 发表于 2017-6-27 13:10:46 | 显示全部楼层
毛二 发表于 2017-6-26 15:09
谢谢分享,STM8S003看看能不能用啊

相对应的库函数改下名字即可
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-7-27
在线时间
16 小时
发表于 2018-7-5 16:45:43 | 显示全部楼层
谢谢,正好需要用!!!
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-1-15
在线时间
3 小时
发表于 2019-5-16 08:58:34 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-3-9
在线时间
2 小时
发表于 2020-5-18 22:55:20 | 显示全部楼层
正在做这方面的项目
回复 支持 反对

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2016-11-5
在线时间
62 小时
发表于 2021-3-16 17:45:01 | 显示全部楼层
这个程序 一个字节一个字节接收发送没问题 但要是一串数据呢! 大概 看了一下 是有问题的!请您具体调试一下 看看!   串口中断处理的不对

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 14:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表