完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在使用单片机的时候,串口是要经常使用的功能,特别是在调试代码的过程中,经常需要使用串口打印出某些变量值,来判断程序执行流程是否正常。但是单片机默认情况下没有printf函数,如果需要使用printf函数的功能,就需要自己在串口代码中配置。下面总结一下如何在STM8单片机中使用printf函数功能。 首先按照常规方法先初始化串口 void Uart1_IO_Init( void ) { PD_DDR |= ( 1 << 5 ); //输出模式 TXD PD_CR1 |= ( 1 << 5 ); //推挽输出 PD_DDR &= ~( 1 << 6 ); //输入模式 RXD PD_CR1 &= ~( 1 << 6 ); //浮空输入 } //baudrate 为需要设置的波特率 void Uart1_Init( unsigned int baudrate ) { unsigned int baud; baud = 16000000 / baudrate; Uart1_IO_Init(); UART1_CR1 = 0; UART1_CR2 = 0; UART1_CR3 = 0; UART1_BRR2 = ( unsigned char )( ( baud & 0xf000 ) >> 8 ) | ( ( unsigned char )( baud & 0x000f ) ); UART1_BRR1 = ( ( unsigned char )( ( baud & 0x0ff0 ) >> 4 ) ); UART1_CR2_bit.REN = 1; //接收使能 UART1_CR2_bit.TEN = 1; //发送使能 UART1_CR2_bit.RIEN = 1; //接收中断使能 } 首先设置IO口,然后设置串口相关寄存器。设置好之后串口就可以使用了,但是这时候还不能使用printf函数功能,要使用printf函数,需要重新定向putchar函数。设置代码如下: #include "stdio.h" int putchar( int ch ) { while( !( UART1_SR & 0X80 ) ); //循环发送,直到发送完毕 UART1_DR = ( u8 ) ch; return ch; } 将putchar添加到串口文件中,然后将函数里面的寄存器设置为串口1,添加头文件stdio.h,这时候就可以使用printf函数了。 下来再主函数中使用printf打印数据就可以了 void main( void ) { unsigned int i = 0; SysClkInit(); __asm( "sim" ); LED_GPIO_Init(); Uart1_Init(9600); __asm( "rim" ); LED = 0; while( 1 ) { LED = !LED; printf( "%drn", i++ ); delay_ms( 500 ); } } 0.5s改变一次LED灯的状态,然后打印一个数字。串口打印效果如下: |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 23:16 , Processed in 0.778497 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号