关于串口读写打印的一些问题

1.禁用半主机模式

方法一:禁用半主机模式,禁用了半主机模式才能使用标准库函数printf()打印信息到串口,在程序中加入以下代码即可。那么什么是半主机模式?为什么不用它?半主机模式是ARM单片机的一种调试机制,跟串口调试不一样的是,它需要通过仿真器来连接电脑和ARM单片机,并调用相应的指令来实现单片机向电脑显示器打印信息(或者从电脑键盘读取输入)。简而言之,这种方法比串口调试更复杂(需要进行更多的配置操作),也更不灵活(一定要用仿真器)。


/********** 禁用半主机模式 **********/
#pragma import(__use_no_semihosting)
 
struct __FILE
{
	int a;
};
 
FILE __stdout;
 
void _sys_exit(int x)
{
	x=x;
}

方法二:使用微库(MicroLIB),只要在Keil的“Options for Target -> Target ->Use MicroLIB”上打钩,即可使用串口打印。微库是区别于C标准库的另一个库,当使用微库时,就默认关闭了半主机模式,也就不用添加上面的代码。这样虽然方便,但微库相对于C标准库而言,支持的功能更少,主要体现在对操作系统的支持上。所以能不用就不用。

2.重定向fputc

由于printf 最终会调用 fputc 进行字符串输出,但是这些函数是标准库提供的,而标准库没有提供源码给你,当你需要用的时候添加 <stdio.h> 即可。在PC端时,printf会将需要打印的信息打印到控制台上,但是单片机没有控制台,fputc 输出的位置可能需要改变,比如输出到 LCD、串口1、串口2,所以需要重定向fputc函数。

/*****************************************************
*function:	写字符文件函数
*param1:	输出的字符
*param2:	文件指针
*return:	输出字符的ASCII码
******************************************************/
int fputc(int ch, FILE *f)
{
	USART_SendData(USARTx, (unsigned char)ch);				//发送数据到串口
	while(USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);		//等待上次发送结束
	return ch;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主机宝管理面板Windows WANMP版 V1.0.1 操作系统支持: Windows 2003 / Windows 2008 / Windows 2012 功能亮点: 1、使用主机宝WANMP(Windows Apache/Nginx MySQL PHP)面板,轻松配置Apache/Nginx、PHP、MySQL环境,Apache和Nginx可随意切换,PHP5.2/PHP5.4版本灵活控制,支持4种运行模式选择,集成站点、数据库、FTP、备份等功能,全可视化操作让您轻松上手使用。 2、当前主机宝已是阿里云使用用户最多、反馈最好、7x24售后最完善的面板,没有之一。现在您无需花费时间配置环境,无需过多的关注服务器运行情况,将更多精力投入到产品研发、推广和运营。 3、根据站长网多年的建站和维护经验,设计出最简单最强大的站点、FTP和数据库管理机制,直观、便捷的管理云服务器。数据库用户可灵活添加,FTP目录可选择或完全自定义。 4、主机宝内置计划任务管理系统,按照您的要求定时备份站点和数据文件,更进一步保障数据安全。内置3389端口修改工具,修改远程3389端口有效避免恶意爆破扫描导致大量资源占用,同时提高远程连接的安全性。 5、最灵活的站点和数据库管理机制,直观、便捷的管理云服务器。Linux主机宝将和Windows主机宝同步开发,不同面板不同的操作系统下统一的操作方式和灵活性,可直接跨平台相互迁移。 网站语言支持: Apache2.4.7、Nginx1.4.5 、PHP5.2.17 / 5.4.31、MySQL5.5.38 软件安装支持: 1、Apache2.4.7、Nginx1.4.5 2、PHP 5.2.17 / PHP 5.4.31 3、MySQL 5.5.38 4、Zend Optimizer3.3.3 5、Memcached 缓存系统 6、FTP服务 (FileZilla Server 0.9.41) 网站程序支持: PHP、MySQL 的所有程序均可在主机宝配置的环境下正常运行,程序如有声明仅限在特定环境版本运行,请按照程序要求切换至相应的PHP版本。
### 回答1: Python 串口读写是指使用Python编程语言来读取和写入串行通信端口的数据。串口通信是一种通过串行接口在两个设备之间进行数据传输的方式。 要在Python中进行串口读写,首先需要安装pySerial库。这个库提供了一些用于串口通信的函数和工具类。 首先,我们需要导入pySerial库: ```python import serial ``` 然后,我们可以创建一个serial.Serial对象来表示一个打开的串口连接。我们需要指定串口端口号、波特率和其他一些参数。例如: ```python ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) ``` 这行代码创建了一个串口对象ser,它表示了一个连接到/dev/ttyUSB0端口,波特率为9600的串口。timeout参数指定了读取串口数据的超时时间,单位是秒。 现在,我们可以使用ser对象来读取和写入串口数据了。要读取串口数据,可以使用read()方法。例如: ```python data = ser.read(10) ``` 这行代码从串口中读取了最多10个字节的数据,并将其存储在data变量中。 要写入串口数据,可以使用write()方法。例如: ```python ser.write(b'Hello') ``` 这行代码向串口写入了字节流b'Hello'。 最后,当我们完成对串口读写操作之后,需要关闭串口连接,以释放资源。可以使用close()方法来关闭串口连接。例如: ```python ser.close() ``` 这就是使用Python进行串口读写的基本操作。当然,pySerial库还提供了其他一些功能,如监听串口状态、设置串口参数等,可以根据需要来使用。 ### 回答2: 在Python中,我们可以使用pyserial库来进行串口读写操作。要使用pyserial库,我们首先需要安装它。可以通过在终端中运行以下命令进行安装: ``` pip install pyserial ``` 安装完毕后,我们可以使用以下代码示例进行串口读写操作: ```python import serial # 打开串口 ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, timeout=1) # 向串口写入数据 ser.write(b'Hello World\n') # 从串口读取数据 data = ser.readline() print(data) # 关闭串口 ser.close() ``` 首先,我们使用`serial.Serial`函数打开一个串口连接。`/dev/ttyUSB0`参数表示串口设备的路径,`baudrate`参数表示波特率,`timeout`参数表示读取超时时间。 然后,我们使用`ser.write`函数向串口写入数据,传入的参数是要发送的字节数据,可以通过`b`前缀将字符串转换为字节。 接下来,我们使用`ser.readline`函数从串口读取一行数据,并将其存储到变量`data`中。最后,我们使用`print`语句将读取到的数据打印出来。 最后,我们使用`ser.close`函数关闭串口连接。 通过以上代码示例,我们可以实现串口读写操作,可以根据自己的需求来读取和写入数据。 ### 回答3: 在Python中,我们可以使用pySerial库来进行串口读写操作。该库提供了丰富的函数和方法,使得串口通信变得简单易用。 首先,我们需要安装pySerial库。可以通过在命令行中运行`pip install pyserial`来安装。 接下来,我们可以使用`serial.Serial()`函数来创建一个串口对象,并指定串口号、波特率等参数。例如,`ser = serial.Serial('COM1', 9600)`创建了一个串口对象ser,将COM1端口以9600波特率打开。 要进行串口的写操作,我们可以使用`ser.write()`方法,将要发送的数据以字节流的形式写入串口。例如,`ser.write(b'Hello World')`将字符串'Hello World'发送到串口。 如果想要读取串口接收到的数据,可以使用`ser.read()`方法。该方法将返回一个字节流,我们可以使用`decode()`函数将其转换为字符串。例如,`received_data = ser.read().decode()`读取一个字节的数据,并将其转换为字符串。 除了以上方法,pySerial库还提供了一些其他的读写函数和方法,例如`ser.readline()`可以读取一行数据,`ser.flush()`可以清空串口缓冲区。根据具体需求,我们可以选择适合的方法来完成串口读写操作。 总之,使用pySerial库可以在Python中进行串口读写操作。通过合理地选择函数和方法,我们可以方便地与外部设备进行串口通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值