OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 9193|回复: 15

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

[复制链接]

  离线 

53

主题

1200

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2412
金钱
2412
注册时间
2014-2-13
在线时间
472 小时
发表于 2015-9-30 09:06:28 | 显示全部楼层 |阅读模式
因项目需求,前段时间供应商给了一块STM8L152C6的discovery板子,拿来鼓捣,顺便做项目,这里分享一个UASRT的测试程序
PS:基本上芯片的外设都用了,有空继续分享
下面贴代码,编译平台为IAR FOR STM8
[C] 纯文本查看 复制代码
#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);
	}
}



STM8L_UART1(基于库).zip

741.95 KB, 下载次数: 20633

技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

  离线 

116

主题

7646

帖子

12

精华

资深版主

Rank: 8Rank: 8

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


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

使用道具 举报

  离线 

516

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

  离线 

2

主题

3

帖子

0

精华

新手上路

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

使用道具 举报

  离线 

1

主题

4

帖子

0

精华

新手上路

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

使用道具 举报

  离线 

53

主题

1200

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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

使用道具 举报

  离线 

0

主题

13

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

  离线 

53

主题

1200

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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

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

使用道具 举报

  离线 

17

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

使用道具 举报

  离线 

0

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
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看看能不能用啊
回复 支持 反对

使用道具 举报

  离线 

53

主题

1200

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2412
金钱
2412
注册时间
2014-2-13
在线时间
472 小时
 楼主| 发表于 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 | 显示全部楼层
谢谢,正好需要用!!!
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

正点原子双11大促销上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-11-14 23:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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