OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2570|回复: 5

串口1正常 串口3不能用 求大神解惑

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-11-14
在线时间
12 小时
发表于 2017-11-15 18:07:17 | 显示全部楼层 |阅读模式
15金钱
时钟和中断头文件
#ifndef _SYS_H_
#define _SYS_H_

#include "stm32f10x_flash.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x.h"

extern void RCC_Configurtion(void);
extern void NVIC_Configurtion(void);
#endif


时钟和中断配置
#include "sys.h"


时钟配置
void RCC_Configurtion(void)
{
        SystemInit();
        
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);
}

中断配置
void NVIC_Configurtion()
{
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        
        
        /*USART3*/
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 12;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}


GPIO头文件
/*USART1 IO¿ú¶¨òå*/
#define USART1_PIN_GROUP                GPIOA
#define USART1_RPIN_NUM                        GPIO_Pin_10
#define USART1_SPIN_NUM                        GPIO_Pin_9

/*USART1 IO¿ú¶¨òå*/
#define USART3_PIN_GROUP                GPIOB
#define USART3_RPIN_NUM                        GPIO_Pin_11
#define USART3_SPIN_NUM                        GPIO_Pin_10


GPIO配置
void GPIO_Configurtaion(void)
{
        GPIO_InitTypeDef GPIO_InitSturcture;
        
        
        PWR_BackupAccessCmd(ENABLE);
        RCC_LSICmd(DISABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
        

        
        /*USART1*/
        GPIO_InitSturcture.GPIO_Pin = USART1_RPIN_NUM;
        GPIO_InitSturcture.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitSturcture.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(USART1_PIN_GROUP,&GPIO_InitSturcture);
        GPIO_InitSturcture.GPIO_Pin = USART1_SPIN_NUM;
        GPIO_InitSturcture.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitSturcture.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(USART1_PIN_GROUP,&GPIO_InitSturcture);
        
        /*USART3*/
        GPIO_InitSturcture.GPIO_Pin = USART3_RPIN_NUM;
        GPIO_InitSturcture.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitSturcture.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(USART3_PIN_GROUP,&GPIO_InitSturcture);
        GPIO_InitSturcture.GPIO_Pin = USART3_SPIN_NUM;
        GPIO_InitSturcture.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitSturcture.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(USART3_PIN_GROUP,&GPIO_InitSturcture);
        
}

串口头文件
#define USART_Debug                USART1
#define USART_458                USART2
#define USART_232                USART3

串口C文件
#include "usart.h"


//oˉêyÖØ¶¨ò壬¿éê1óÃrintfoˉêy
#if 1
#pragma import(__use_no_semihosting)             //±ê×¼¿aDèòaμÄÖ§3Öoˉêy                 
struct __FILE
{
        int handle;

};

FILE __stdout;                                                               //¶¨òå_sys_exit()òÔ±üÃaê1óðëÖ÷»úģ꽠  
_sys_exit(int x)
{
        x = x;
}                                                                                                 //ÖØ¶¨òåfputcoˉêy
int fputc(int ch, FILE *f)
{      
        while((USART_Debug->SR&0X40)==0);                        //Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï   
    USART_Debug->DR = (u8) ch;      
        return ch;
}
#endif

/******************************************************
oˉêyÃû3Æ£oUSART_Configuration(void)
oˉêy1|Äü£»3õê¼»ˉIO¿ú
êäèë2Îêy£»
·μ»Ø2Îêy£»
±¸    ×¢:
******************************************************/
void USART_Configguration(USART_TypeDef *USARTx,un32 baud)
{
        USART_InitTypeDef USART_InitStructure;
        
        USART_StructInit(&USART_InitStructure);
        USART_DeInit(USARTx);
        USART_InitStructure.USART_BaudRate = baud;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
        USART_Init(USARTx,&USART_InitStructure);
        USART_ITConfig(USARTx,USART_IT_TC,DISABLE);
        USART_ITConfig(USARTx,USART_IT_RXNE,DISABLE);
        
        if(USARTx == USART1)
        {
                USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
                USART_ClearFlag(USART1,USART_FLAG_TC);
        }
        else if(USARTx == USART2)
        {
                USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
                USART_ClearFlag(USART2,USART_FLAG_TC);
        }
        if(USARTx == USART3)
        {
                print_debug("ÅäÖÃUSART3\r\n");
                USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
                USART_ClearFlag(USART3,USART_FLAG_TC);
        }
        USART_Cmd(USARTx,ENABLE);
}


/******************************************************
oˉêyÃû3Æ£ovoid Usart_Senddatas(USART_TypeDef* Usartx, un8* data, un16 len)
oˉêy1|Äü£»ÏòÖ¸¶¨′®¿ú·¢Ëíêy¾Y
êäèë2Îêy£»
·μ»Ø2Îêy£»
±¸    ×¢:
******************************************************/
void USART_Senddatas1(USART_TypeDef *USARTx,un8 *data,un16 len)
{
        un16 i;
        un16 time;
        for(i=0; i<len; i++)
        {
                time = 0;
                USART_SendData(USARTx,data);
                while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)== RESET && ++time <10000)
                {
                        USART_GetFlagStatus(USARTx,USART_FLAG_TC);
                }
                USART_ClearFlag(USARTx,USART_FLAG_TC);
        }
}

void USART_Senddatas(USART_TypeDef *USARTx,un8 *data,un16 len)
{
        un16 i;
        un16 time;
        for(i=0; i<len; i++)
        {
                time = 0;
                USART_SendData(USARTx,data);
                while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)== RESET && ++time <10000)
                {
                        USART_GetFlagStatus(USARTx,USART_FLAG_TC);
                }
                USART_ClearFlag(USARTx,USART_FLAG_TC);
        }
}


/******************************************************
oˉêy&#195;&#251;3&#198;£oun8 print_debug(const un8* format,...)
oˉêy1|&#196;ü£&#187;&#207;òμ÷ê&#212;′&#174;&#191;ú′òó&#161;êy&#190;Y
ê&#228;è&#235;2&#206;êy£&#187;
·μ&#187;&#216;2&#206;êy£&#187;
±&#184;    ×¢:
******************************************************/
const un16 send_data_len = 100;
un8 send_data_buf[send_data_len+1];

un8 print_debug(const un8* format,...)
{
        un16 lenth;
        static va_list arg;
        
        va_start(arg,format);
        lenth = 0;
        lenth += vsnprintf((char *)send_data_buf,send_data_len,(const char *)format, arg);
        va_end(arg);
        USART_Senddatas1(USART_Debug,send_data_buf,lenth);
        return lenth;
}



主函数

int main(void)
{
        RCC_Configurtion();
        GPIO_Configurtaion();
        NVIC_Configurtion();
        USART_Configguration(USART_Debug,9600);
        //print_debug("****************8\r\n");
        USART_Configguration(USART_232,9600);
        delay_init();
        //print_debug("****************8\r\n");
        
        while(1)
        {
                USART_Senddatas(USART_232,"123456789",9);
                //print_debug("12345678911\r\n");
                delay_ms(100);
        }
}




哪位大神看下  哪里出问题了   串口3打死不出数据


LED显示.zip

4.96 MB, 下载次数: 103

最佳答案

查看完整内容[请看2#楼]

完事了 知道了 和I2C2顶了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-11-14
在线时间
12 小时
 楼主| 发表于 2017-11-15 18:07:18 | 显示全部楼层
完事了   知道了  和I2C2顶了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-11-16 01:09:28 | 显示全部楼层
论坛搜索,参考别人的例程。串口3的大把。
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-11-14
在线时间
12 小时
 楼主| 发表于 2017-11-16 05:57:53 | 显示全部楼层
正点原子 发表于 2017-11-16 01:09
论坛搜索,参考别人的例程。串口3的大把。

和例程对了   没有差什么   郁闷在这里   
回复

使用道具 举报

16

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-10-31
在线时间
26 小时
发表于 2017-12-12 16:37:13 | 显示全部楼层
woshixiaoye 发表于 2017-11-15 18:07
完事了   知道了  和I2C2顶了

请问怎么修改的?
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2017-12-12 18:29:15 | 显示全部楼层
chun307 发表于 2017-12-12 16:37
请问怎么修改的?

你那是什么问题?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 13:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表