完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这是个串口发射程序,仿真没有问题,开发板也没有问题,其他的程序能够使用,就是这个程序在电脑上看不到数据
#include<STM32f10x_gpio.h> #include #include int main() { float DIV; u16 M,F,BRR; u32 BOUND; u8 data='A'; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2外设的GPIOA的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIOA->CRH = 0X000004B0; USART1->CR1 |= (1<<13); USART1->CR1 &= ~(1<<12); USART1->CR2 &= ~(3<<12); USART1->CR1 |= (1<<3); BOUND = 9600; DIV = (float)(36*1000*1000)/(BOUND*16); M = DIV; F = (DIV-M)*16; BRR = M<<4+F; USART1->BRR = BRR; // RCC->APB1RSTR|=1<<18; //复位串口3 // RCC->APB1RSTR&=~(1<<18);//停止复位 for(F=0;F<20;F++) { USART1->DR = data; data++; while((USART1->SR & (1<<6))==0); } } |
|
相关推荐
8个回答
|
|
|
|
|
|
|
|
串口配置好像没有错,错误应该在这段里面:
for(F=0;F<20;F++) { USART1->DR = data; data++; while((USART1->SR & (1<<6))==0); } } 先弄个死循环一直发送,再看看寄存器 ((USART1->SR & (1<<6))==0)是不是应该是((USART1->SR & (1<<7))==0) E:张晓瑞stm32 |
|
|
|
|
|
|
|
应该是你的波特率计算有问题,如果你的时钟频率确实是36×1000×1000,这个计算应该没问题,误差不大,不影响UART的同步;
请确定你的时钟确实的数值,如果你是比较规范的使用系统头文件构成项目,请使用RTE_PCLK2替换36×1000×1000;或者在PC端改变接收串口波特率试一下? 你的程序中存在下面描述的问题: BOUND = 9600; DIV = (float)(36*1000*1000)/(BOUND*16); M = DIV; F = (DIV-M)*16; BRR = M<<4+F; 这个计算里面有问题,先M = DIV,然后 F = (DIV-M)*16;我直接怀疑编译器会将这两句译成 F=0; |
|
|
|
先看波特率设置是否正确,接着尝试发单独一个数据来排查是哪出错了。很有可能是波特率初始化的错误
|
|
|
|
谢谢各位的回答 问题已经解决了,问题是在发送第一个字符的时候没有检查TC是否为空
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
485 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
605 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
558 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
799 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明
719 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 16:07 , Processed in 0.685233 second(s), Total 87, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号