us100超声波问题(使用STM32串口2)

2019-07-20 23:55发布

[mw_shl_code=c,true]void UART2_Init()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
//        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2|
                                                                                                 RCC_APB2Periph_GPIOA, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /*NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//ÇàÕ¼óÅÏ輶3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //×óóÅÏ輶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷*/
       
        USART_InitStructure.USART_BaudRate = 9600;//′®¿ú2¨ìØÂê[mw_shl_code=c,true]u16 Ultrasonic_Ranging()
{
        u16 temp;
//        u32 range;
        USART_SendData(USART2,0x55);
        PCout(13)=0;
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//μè′y·¢Ëí½áêø
       
        while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET);
        temp=USART_ReceiveData(USART2);
        temp=temp<<8;
        while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET);
        temp|=USART_ReceiveData(USART2);
        return temp;
}[/mw_shl_code]
然后是测距

[mw_shl_code=applescript,true]USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;
USART_Init(USART2, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú1

//USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óêü&#214;D&#182;&#207;
//USART_ITConfig(USART2, USART_IT_TC, ENABLE);
USART_Cmd(USART2, ENABLE); //ê1&#196;ü′&#174;&#191;ú1
}[/mw_shl_code][/mw_shl_code]


主函数

[mw_shl_code=c,true]#include "Ultrasonic.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "LED.h"
extern u16 distance;
void usart1_send_char(u8 c)
{
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
    USART_SendData(USART1,c);   
}
int main()
{
        u16 range;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init();
        uart_init(115200);
        Ultrasonic_Init();
        LED_Init();
        while(1)
        {
                range=Ultrasonic_Ranging();
                usart1_send_char(range>>8);
                usart1_send_char(range);
                PCout(13)=!PCout(13);
                delay_ms(500);
        }
}
[/mw_shl_code]




不知道为什么一直卡死在测距函数里,好像串口的发送完成标志位一直都没被标志,请各位帮我看一下,不胜感激!!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
陈俣
1楼-- · 2019-07-21 05:20
搞定了,串口2的时钟开错了
skyworld
2楼-- · 2019-07-21 09:46
 精彩回答 2  元偷偷看……
yqp
3楼-- · 2019-07-21 10:49
能发一份中断的代码让我参考一下吗

一周热门 更多>