打印
[STM32]

熟悉STM32串口的高手帮我看看

[复制链接]
899|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
565715470|  楼主 | 2014-7-16 23:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"stdio.h"
#include"stm32f10x.h"
void uart_init(uint32_t pclk2,uint32_t bound);
void USART1_IRQHandler(void);
int main(void)
{
        RCC->APB2ENR|=(uint32_t)RCC_APB2ENR_IOPBEN;
        GPIOB->CRH|=(uint32_t)(GPIO_CRH_CNF10_0|GPIO_CRH_MODE10);
       
        uart_init(72,9600);

        while(1)
        {
        }
}

void uart_init(uint32_t pclk2,uint32_t bound)
{
        float temp;
        uint16_t mantissa;
        uint16_t fraction;
        temp=(float)(pclk2*1000000)/(bound*16);
        mantissa=temp;
        fraction=(temp-mantissa)*16;
        mantissa<<=4;
        mantissa+=fraction;

       
        //UART1³õʼ»¯
        NVIC->ISER[1]|=NVIC_ISER_SETENA;
        NVIC->ISER[0]|=NVIC_ISER_SETENA;
        RCC->APB2ENR|=(uint32_t)RCC_APB2ENR_IOPAEN;      //´ò¿ªGPIOAʱÖÓ
        RCC->APB2RSTR|=(uint32_t)(RCC_APB2RSTR_USART1RST);      //¸´Î»´®¿Ú1
        RCC->APB2RSTR&=~(uint32_t)(RCC_APB2RSTR_USART1RST);              //Í£Ö¹¸´Î»´®¿Ú1
        RCC->APB2ENR|=(uint32_t)RCC_APB2ENR_USART1EN;    //´ò¿ª´®¿ÚʱÖÓ
        GPIOA->CRH|=(uint32_t)(GPIO_CRH_CNF9_1|GPIO_CRH_MODE);   //TXÍÆÍ츴Óù¦ÄÜÊä³ö
        GPIOA->CRH|=(uint32_t)(GPIO_CRH_CNF10_0);                //RX¸¡¿ÕÊäÈë
        USART1->BRR=mantissa;                    //ÉèÖò¨ÌØÂÊ
       
        USART1->CR1|=(uint32_t)USART_CR1_UE;             //UE=1£¬¼¤»îUSART1
        USART1->CR1|=(uint32_t)USART_CR1_TE;             //TE=1£¬·¢ËÍʹÄÜ
        USART1->CR1|=(uint32_t)USART_CR1_RE;             //RE=1£¬½ÓÊÜʹÄÜ
        USART1->CR1|=(uint32_t)USART_CR1_RXNEIE;         //½ÓÊÕ»º³åÇø·Ç¿ÕÖжÏʹÄÜ
}
void USART1_IRQHandler(void)
{
        uint8_t temp;
        GPIOB->ODR=~GPIOB->ODR;
        if(USART1->SR&USART_SR_RXNE)
        {
                temp=USART1->DR;
                USART1->DR=temp;
        }       
}



这是我写的STM32串口程序,想实现的功能是我往USART1发送一个字符,然后单片机再把这个字符发回给我。
但我这程序现在的状况就是:我给他发字符,而他却不进中断。熟悉STM32的大虾们帮我看看吧,谢谢!!!



相关帖子

沙发
frlop| | 2014-7-17 08:00 | 只看该作者
中断程序是不是要清楚一下标志位。

使用特权

评论回复
板凳
565715470|  楼主 | 2014-7-17 12:06 | 只看该作者
我看数据手册上写的只要读出数据寄存器中的数据就会自动清除标志位;
现在这程序的问题是他不仅中断,我的GPIOB上有灯,进中断后应该亮灭,但没反应。

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝