完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现象很奇怪 ,当采用1200速率 用sscom 一次发送 30k数据 。然后STM32接收终端做了个很简单的计算 收到1个数+1 结果只收到640个数
如果采用115200 那么可以接收到12k左右的数据 。 波特率越高 能一次接收的数据就越多。 当我用1200波特率 然后 一次发1k数据 暂停1秒 再发1k 这样 我每发1k stm32会多接收640个数 贴上我的代码 串口代码是从 原子哥的寄存器串口实验抄的 。系统时钟 72M 波特率 1200 1.串口初始化代码 void uart_init(u32 pclk2,u32 bound){ float temp;u16 mantissa;u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIVmantissa=temp; //得到整数部分fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4;mantissa+=fraction; RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB2ENR|=1<<14; //使能串口时钟 GPIOA->CRH&=0XFFFFF00F; GPIOA->CRH|=0X000008B0;//IO状态设置 RCC->APB2RSTR|=1<<14; //复位串口1RCC->APB2RSTR&=~(1<<14);//停止复位 //波特率设置 USART1->BRR=mantissa; // 波特率设置 USART1->CR1|=0X200C; //1位停止,无校验位.#ifdef EN_USART1_RX //如果使能了接收//使能接收中断USART1->CR1|=1<<8; //PE中断使能USART1->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(1,3,USART1_IRQChannel,2);//组2,最低优先级 #endif} 2 串口接收终端代码 si的定义 u32 si=0; void USART1_IRQHandler(void){ //测试接收 u8 res; if(USART1->SR&(1<<5))//接收到数据 读走后为0 { res=USART1->DR; si++; } } 求帮助 !! 补充 : 发现 就是 不管你一次发送多少个数据 但是 只进入了640次串口中断 。然后只要你隔一阵(1秒?) 就可以再进入640次中断 |
|
相关推荐
15个回答
|
|
你的系统只接数干其他的不?波特率1200一秒钟什么都不干只能接数据,还有你是接一个数据处理一次,很有可能问题在这,你试着全部接收完了之后存在一个数组里面,在对他计数!或者留够处理的时间!
|
|
|
|
我就测试长数据接收 除了这个 什么都没干
|
|
|
|
是啊 我就奇怪 难道芯片挂了?
|
|
|
|
不知道你的main函数怎么处理的
|
|
|
|
主要用处是 我按下按键 然后把 si的数值 发送到串口
int main(void) { u8 key_buf; STM32_init(); KEY_Init(); while(1) { key_buf=KEY_Scan(); //扫描键值 key_run(key_buf); //处理键值 主要是发送si的值到串口 } } 其中 STM32_init(); 函数: void STM32_init(void){ Stm32_Clock_Init(sys_clock); //9倍频 运行在 72M sys_clock=9delay_init(sys_clock*8); //初始化延迟函数 72为运行频率uart_init(sys_clock*8,bote); //初始化串口 函数 usart_init(x1,x2) x=运行频率 x=波特率 bote=1200JTAG_Set(JTAG_SWD_DISABLE); //停止JTAG } 其中 key_run 就是 send_232(0xaa); send_232(0x55);send_232(si>>16); send_232(si>>8); send_232(si); send_232(函数) void send_232(u8 date){ printf("%c",date); } |
|
|
|
你的si没看到清零的地方...
|
|
|
|
忘记标了 一开始 定义的时候 u32 si=0;
|
|
|
|
定义的时候是0,但是你每次要统计啊.你不会是一直累加吧?
--------------------------------- 正常是应该累加 例如我用sscom 发送 500字节 si应该=500 然后我再发送500字节 si应该=1000 |
|
|
|
|
|
今天刚测试了 采用FT232RL 一次传输100k数据 无一出错。
但是有个疑惑请楼上指教: 我采用FT232RL 选择3.3v ttl输出 STM32居然一个数没收到。 但是看资料 应该是3.3ttl 和5v 都应该能支持才对啊 |
|
|
|
你的"选择5VTTL"和"选择3.3VTTL"是指修改VCCIO的电压,还是用配置软件设置?我从来只用3.3V,从来没有问题.
|
|
|
|
采用ft232rl调试过程如下
用的是网上买回来的 ft232rl模块 30块钱的那种测试的 首先 vccio 接3.3 stm32发数据 pc能收到 pc发数据 stm32一个都收不到 然后 vccio 接5v stm32发数据正常 pc发数据 数据量大 也出错 然后 我将模块的vcc 接到我板子上的3,3v vccio接5v 测试100k 无错漏了。 我奇怪的是 理论上来说 3.3v的 vccio输出 应该更适合 stm32 。但是我却是一个字没收到。 调试过程中没有修改stm32f103vct6的程序。都用同一个程序测试的。 看ft232rl的原理图 模块的那个vcc 应该是ft232输出的3.3v 才对(FT232RL引脚名称 3.3out) 那个好像不需要输入vcc的。 电路来说 ft232rl 与 stm32的 rx tx 各串了一个220欧电阻 |
|
|
|
|
|
|
|
麻烦检查地线是否连接正确.
|
|
|
|
地线链接正确的
|
|
|
|
只有小组成员才能发言,加入小组>>
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
382 浏览 1 评论
250 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
230 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
590 浏览 2 评论
615 浏览 2 评论
1345浏览 9评论
STM32F429 U盘IAP升级程序跳转APP异常的原因?
14浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
12浏览 3评论
STM32F103时钟硬件程序会卡在“while((SPI3->SR SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);”导致异常复位的原因?
109浏览 3评论
10浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 12:29 , Processed in 0.704384 second(s), Total 84, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号