请教一下关于usart.c的移植问题,谢谢。

2019-10-11 16:30发布

请教一下关于usart.c的移植问题,谢谢。
感谢原子哥的开源,想尝试把F1的usart.c移植到F0系列的CPU上使用,但是发现如下报错,是因为F0系列的CPU没有定义SR和DR吗?那么可以自己定义并添加吗?谢谢。


//重定义fputc函数
int fputc(int ch, FILE *f)
{      
        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;           
        return ch;        
}
#endif



QQ图片20170313155256.png


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
小陀螺爱炒蛋
1楼-- · 2019-10-11 18:20
看F0的data sheet,找到跟这个寄存器bit功能相同的bit~
taizonglai
2楼-- · 2019-10-11 22:24
查看F0的数据手册,看有没有SR这个寄存器!如果没有的话就查看同等功能的寄存器叫什么名字
Alvanbai
3楼-- · 2019-10-12 03:13
本帖最后由 Alvanbai 于 2017-3-14 09:55 编辑
[/mw_shl_code]小陀螺爱炒蛋 发表于 2017-3-13 15:54
看F0的data sheet,找到跟这个寄存器bit功能相同的bit~

感谢炒蛋前辈的指点,按你说的方法我查找到了定义这两个寄存器功能,但是F1的官方库文件没有描述备注,F0的库文件里有,还得请教一下,F1中的SR和DR对应F0中的哪两个寄存器呢,再次感谢!我个人的理解是F1中SR是命名成为RESERVED0,DR命名成为RESERVED1。F0中没有RESERVED0,能推断是RESERVED1和RESERVED2吗?
F1的:
f1.png


F0的:
f2.png
Alvanbai
4楼-- · 2019-10-12 07:22
int fputc(int ch, FILE *f)
{      
        while((USART1->ISR&0X40)==0);//循环发送,直到发送完毕   
    USART1->TDR = (u8) ch;          
        return ch;       
}

仔细看了这个程序,感觉是判断发送状态的,按照注释看是不是SR应该对应ISR,但是F0的ISR是定义成U32了呢,F1的SR是u16。DR的话应该是数据寄存器,可是F0里面分成了发送数据寄存器TDR和接受寄存器TDR,应该怎么对应呢
小陀螺爱炒蛋
5楼-- · 2019-10-12 08:19
 精彩回答 2  元偷偷看……
Alvanbai
6楼-- · 2019-10-12 10:08
小陀螺爱炒蛋 发表于 2017-3-14 13:33
首先,源代码中这个bit就是检查是否发送完成的标志,在STM32F1中,我们可以通过查询SR(状态寄存器)polli ...

感谢指教!
另外请教原子哥的代码中
    USART1->DR = (u8) ch;     
这个是做什么用的,在F0上也报错,F0中没有DR寄存器。这个DR寄存器是指数据寄存器吗?      

一周热门 更多>