打印

新人请教一下串口一些问题。

[复制链接]
251|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小蘭|  楼主 | 2018-7-15 12:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用原子实验例程 现在需要跟FPGA做一个串口通信。代码是原子的代码 ,初始化在下面
//初始化IO 串口1
//pclk2CLK2时钟频率(Mhz)
//bound:波特率
void uart_init(u32 pclk2,u32 bound)
{
        float temp;
        u16 mantissa;
        u16 fraction;
        temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV@OVER8=0
        mantissa=temp;                                 //得到整数部分
        fraction=(temp-mantissa)*16; //得到小数部分@OVER8=0
    mantissa<<=4;
        mantissa+=fraction;
        RCC->AHB1ENR|=1<<0;           //使能PORTA口时钟
        RCC->APB2ENR|=1<<4;          //使能串口1时钟
        GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出
         GPIO_AF_Set(GPIOA,9,7);        //PA9,AF7
        GPIO_AF_Set(GPIOA,10,7);//PA10,AF7
        //波特率设置
         USART1->BRR=mantissa;         //波特率设置         
        USART1->CR1&=~(1<<15);         //设置OVER8=0
        USART1->CR1|=1<<3;          //串口发送使能
#if EN_USART1_RX                          //如果使能了接收
        //使能接收中断
        USART1->CR1|=1<<2;          //串口接收使能
//        USART1->CR1|=1<<5;            //接收缓冲区非空中断使能                    
        MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级
#endif
        USART1->CR1|=1<<13;          //串口使能
}


初始化没有任何改动。我看手册上说发送使能打开之后,只要状态寄存器里面的TXE位清空,只需往数据寄存器USART1->DR里面写数据就可以发送。所以我做了下面一个函数 放在了MAIN函数的WHILE循环里。、、

void USART_SEND_BYTE(u8 ch)
{
        while((USART1->SR&0X40)==0);
        USART1->DR = ch;
        return;
}


主函数

int main(void)
{

        Stm32_Clock_Init(336,25,2,7);//设置时钟,168Mhz
        delay_init(168);                //延时初始化
        uart_init(84,115200);        //串口初始化为115200
        while(1)
        {
                USART_SEND_BYTE(0x55);
        }
}


这个只是想尝试一下串口数据有没有发出,但是现在FPGA并没接收到任何数据(FPGA程序确认并测试无误),示波器测对应管脚PA9没任何电平变化。
所以想哪个大神能说一下我哪里没想明白或者想错了。我用的片子是STM32F407VET6。

使用特权

评论回复

相关帖子

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

本版积分规则

451

主题

463

帖子

1

粉丝