打印

新手求助串口查询方式通信问题

[复制链接]
1637|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
李淡淡|  楼主 | 2013-11-20 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道为什么不能通信
代码如下
void UsartSet(void)
        {
         RCC->APB2ENR=(0x400d|RCC->APB2ENR);
         /*P61 RCC_APB2ENR_USART1EN  14位 开启串口1的时钟
         P62  RCC_APB2ENR_IOPBEN  2位 开启端口A的时钟
         P62  RCC_APB2ENR_IOPBEN  3位 开启端口B的时钟
         P62  RCC_APB2ENR_AFIOEN  0位 开启复用时钟*/
         AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000;//关闭JTAG
         GPIOA->CRH&=0xfffff00f;//P75  GPIO_CRH  配置端口PA9为复用推挽输出,端口PA10为上下拉输入模式
         GPIOA->CRH|=0x000008B0;
         GPIOB->CRH=0x44444443; //P75  GPIO_CRH   配置端口PB8为推挽输出
         RCC->APB2RSTR|=1<<14;  //P56 RCC_APB2RSTR_USARTRATR 复位USART1
         RCC->APB2RSTR&=~(1<<14);
         USART1->CR1|=1<<13;    //P496  USART_CR1_UE  使能USART
         USART1->CR1|=0<<12;    //P496  USART_CR1_M   定义帧格式为1个起始位,8个数据位,n个停止位
         USART1->CR2=(0xbfff&USART1->CR2);//498 USART_CR2_STOP  [13:12]  置00,代表一位停止位
         USART1->CR1|=0<<10;//P497  USART_CR1_PCE   禁止校验位
         USART1->BRR=(0x1d4c|USART1->BRR);//P496  USART_BRR  设置波特率为9600对应468.75=0x1d4c
         USART1->CR1|=1<<2;//P497 USART1_CR1_RE  接收被使能

        }

void UsartRec(void)
        {
         GPIOB->ODR|=1<<8;
         while((0x20 & USART1->SR)==0);//P494  USART_SR_RXNE   5位为1时 表示收到数据可以读出
                  UsartTra();
        }

void UsartTra(void)
        {        
//         while((0x80 & USART1->SR)==0);//P494  USART_SR_TXE   7位为1时 表示发送数据寄存器为空
         USART1->DR=0x11;
         while((0x40 & USART1->SR)==0);//P494  USART_SR_TC   6位为1时 表示发送完成
        }




主函数
#include"stm32f10x_lib.h"
#include"usart.h"
#include"sys.h"
#include"stm32f10x_usart.h"

int main()
        {
         Stm32_Clock_Init();

         UsartSet();
         GPIOB->ODR&=0<<8;
         delay_ms(5000);
         while(1)
         {
          UsartRec();
          }
  
        }
沙发
haibian826| | 2013-11-20 18:52 | 只看该作者
你一直发送0x11??
发送试下这个:USARTx->DR = (Data & (uint16_t)0x01FF);   data是要发送的数据,uint16_t的

使用特权

评论回复
板凳
李淡淡|  楼主 | 2013-11-20 19:22 | 只看该作者
haibian826 发表于 2013-11-20 18:52
你一直发送0x11??
发送试下这个:USARTx->DR = (Data & (uint16_t)0x01FF);   data是要发送的数据,uint1 ...

嗯,我试试:)
我现在考虑的不是发送的内容,而是根本不能发送和接收。
PC端的串口调试工具和板子通信的原理是什么啊,就是你放到USART_DR中的数据他是怎么获取的,

使用特权

评论回复
地板
haibian826| | 2013-11-20 19:51 | 只看该作者
PC端的工具,怎么处理数据的,那我不懂了
如果你要整个程序,我随时上传
另外,建议使用库函数开发。。。毕竟库函数,都是经过验证的,我们只要调用就行,无需怀疑为啥该函数不能发送等等之类

使用特权

评论回复
5
李淡淡|  楼主 | 2013-11-20 19:55 | 只看该作者
haibian826 发表于 2013-11-20 19:51
PC端的工具,怎么处理数据的,那我不懂了
如果你要整个程序,我随时上传
另外,建议使用库函数开发。。。毕 ...

嗯,谢谢
给个串口查询方式通信的程序

使用特权

评论回复
6
haibian826| | 2013-11-20 23:44 | 只看该作者
XQ_STM32_USART1_串口查询_OK.rar (882.36 KB)

使用特权

评论回复
7
李淡淡|  楼主 | 2013-11-22 20:12 | 只看该作者
haibian826 发表于 2013-11-20 23:44

谢谢啊,
在问你你个问题
当我打开复用时钟后再打开端口A的时钟会不会有什么冲突
接收数据不对要考虑哪里的错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝