新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2021-7-13
- 在线时间
- 2 小时
|
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
|