OpenEdv-开源电子网

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

探索者f4,串口4(uart4)能接收,不能发送

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-7-13
在线时间
2 小时
发表于 2021-7-13 11:26:30 | 显示全部楼层 |阅读模式
1金钱
STM32F407ZET6芯片,在串口通信实验的基础上增加UART4,但是UART4能够收到数据,不能正常发出数据。相关代码如下:
①初始化部分:
UART_HandleTypeDef UART4_Handler; //UART4句柄
//初始化IO 串口4
//bound:波特率
void uart4_init(u32 bound)
{       
        //UART 初始化设置
        UART4_Handler.Instance=UART4;                                            //USART1
        UART4_Handler.Init.BaudRate=bound;                                    //波特率
        UART4_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
        UART4_Handler.Init.StopBits=UART_STOPBITS_1;            //一个停止位
        UART4_Handler.Init.Parity=UART_PARITY_NONE;                    //无奇偶校验位
        UART4_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
        UART4_Handler.Init.Mode=UART_MODE_TX_RX;                    //收发模式
        UART4_Handler.Init.OverSampling = UART_OVERSAMPLING_16;//过采样设置
        HAL_UART_Init(&UART4_Handler);                                            //HAL_UART_Init()会使能UART4
       
        HAL_UART_Receive_IT(&UART4_Handler, (u8 *)&aRxBuffer4, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量

}



void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
        GPIO_InitTypeDef GPIO_Initure;
       
        if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
        {
                //省略串口1的初始化
        }
        if(huart->Instance==UART4)//如果是串口1,进行串口1 MSP初始化
        {
                __HAL_RCC_GPIOA_CLK_ENABLE();                        //使能GPIOA时钟
                __HAL_RCC_UART4_CLK_ENABLE();                        //使能UART4时钟
       
                GPIO_Initure.Pin=GPIO_PIN_0;                        //PA0
                GPIO_Initure.Mode=GPIO_MODE_AF_PP;                //复用推挽输出
                GPIO_Initure.Pull=GPIO_PULLUP;                        //上拉
                GPIO_Initure.Speed=GPIO_SPEED_FAST;                //高速
                GPIO_Initure.Alternate=GPIO_AF8_UART4;        //复用为UART4
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);                   //初始化PA0

                GPIO_Initure.Pin=GPIO_PIN_1;                        //PA1
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);                   //初始化PA1
               
#if EN_UART4_RX
                HAL_NVIC_EnableIRQ(UART4_IRQn);                                //使能UART4中断通道
                HAL_NVIC_SetPriority(UART4_IRQn,3,2);                        //抢占优先级3,子优先级2
#endif       
        }


②主函数部分
uint8_t CMD4[3]={0xF6,0x01,0xA0};
int main(void)
{
        LED0 = 1;
    HAL_Init();                            //初始化HAL库   
    Stm32_Clock_Init(168,4,2,4);          //设置时钟,168Mhz
        delay_init(168);                       //初始化延时函数
        uart_init(115200);              //初始化USART
        uart4_init(115200);              //初始化UART4
        LED_Init();                                                //初始化LED       
    KEY_Init();                     //初始化按键
       
    while(1)
    {
                HAL_UART_Transmit(&UART4_Handler,(uint8_t*)CMD4,3,0xffff);
                if(startflag ==1)
      {
        startflag =0;
                  LED0 = ~ LED0;
      }
          delay_ms(500);  
    }
}

串口收到PC端发来的数据可以使LED灯亮或灭,但是无法使用HAL_UART_Transmit()发出数据。(串口1是可以正常使用的)。



最佳答案

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

参考一下这个帖子 http://www.openedv.com/forum.php?mod=viewthread&tid=282924
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

369

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4241
金钱
4241
注册时间
2020-7-24
在线时间
714 小时
发表于 2021-7-13 11:26:31 | 显示全部楼层
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2024-10-23
在线时间
2 小时
发表于 2025-3-24 10:01:50 | 显示全部楼层
不要用UART4资源,因为探索者的UART4复用的PA1引脚接了PHY模块,那个TXC一直在发数据,前几天用探索者做原型验证的时候也遇到了这个问题,调试的时候看了下发现串口一直在中断触发崩溃了都,在站内一直没找到问题,也没往那方向去想。改了下Reset信号发现没能关掉TXC,不知道是不是我哪里写的有问题,但是暂时没空试
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-4 07:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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