串口配置:
void UART1_Configure( void )
{
UARTn_CFG_Type UARTn_Config;
/*
* Initialize UART1 pin connect
*/
HAL_GPIO_ConfigOutput( ( Pn_Type* )PB, 7, ALTERN_FUNC );
HAL_GPIO_ConfigFunction( ( Pn_Type* )PB, 7, AFSRx_AF1 );
HAL_GPIO_ConfigPullup( ( Pn_Type* )PB, 7, PUPDx_EnablePU );
HAL_GPIO_ConfigOutput( ( Pn_Type* )PB, 6, ALTERN_FUNC );
HAL_GPIO_ConfigFunction( ( Pn_Type* )PB, 6, AFSRx_AF1 );
HAL_UART_ConfigStructInit( &UARTn_Config );
HAL_UART_Init( ( UARTn_Type* )UART1, ( UARTn_CFG_Type* )( &UARTn_Config ) );
HAL_UART_ConfigInterrupt( ( UARTn_Type* )UART1, UARTn_INTCFG_RBR, ENABLE );
HAL_UART_Transmit( ( UARTn_Type* )UART1, ( uint8_t* )"\n\rUSART SPI Interrupt test \n\r", 29, BLOCKING );
HAL_UART_Transmit( ( UARTn_Type* )UART1, ( uint8_t* )"SPI12 master, SPI13 slave\n\r", 27, BLOCKING );
printf("系统初始化\n");
NVIC_SetPriority( UART1_IRQn, 3 );
NVIC_EnableIRQ( UART1_IRQn );
HAL_INT_EInt_MaskDisable( MSK_UART1 );
}
SPI配置:SPI不能开启中断,否则会导致发送数据时波特率过高而引起中断溢出死机
//SPI 射频模块
void UART11_Configure( void )
{
USART1n_CFG_Type USART1n_Config;
/*
* Initialize USART11
*/
HAL_GPIO_ConfigOutput( ( Pn_Type* )PD, 2, ALTERN_FUNC );
HAL_GPIO_ConfigFunction( ( Pn_Type* )PD, 2, AFSRx_AF2 );
HAL_GPIO_ConfigOutput( ( Pn_Type* )PD, 3, ALTERN_FUNC );
HAL_GPIO_ConfigFunction( ( Pn_Type* )PD, 3, AFSRx_AF2 );
HAL_GPIO_ConfigOutput( ( Pn_Type* )PD, 4, ALTERN_FUNC );
HAL_GPIO_ConfigFunction( ( Pn_Type* )PD, 4, AFSRx_AF2 );
HAL_GPIO_ConfigOutput( ( Pn_Type* )PD, 5, PUSH_PULL_OUTPUT );
// HAL_GPIO_ConfigFunction( ( Pn_Type* )PD, 5, AFSRx_AF2 );
// default: 38400-8-N-1
HAL_USART_SPI_Mode_Config( &USART1n_Config );
HAL_USART_Init( ( USART1n_Type* )USART11, &USART1n_Config );
// SPI Master
HAL_USART_DataControlConfig( ( USART1n_Type* )USART11, USART1n_CONTROL_MASTER, ENABLE );
// Slave SS Function Enable
HAL_USART_DataControlConfig( ( USART1n_Type* )USART11, USART1n_CONTROL_USTSSEN, DISABLE );
// HAL_USART_ConfigInterrupt( ( USART1n_Type* )USART11, USART1n_INTCFG_RXC, ENABLE );
// HAL_USART_ConfigInterrupt( ( USART1n_Type* )USART11, USART1n_INTCFG_TXC, ENABLE );
// NVIC_SetPriority( USART11_IRQn, 3 );
// NVIC_EnableIRQ( USART11_IRQn );
// HAL_INT_EInt_MaskDisable( MSK_USART11 );
// ENABLE
HAL_USART_Enable( ( USART1n_Type* )USART11, ENABLE );
}
printf重定向:
//重定向fputc函数
int fputc(int ch, FILE *f) //两个标准参数
{
//将要发送的数据通过串口1发送出来(可以用电脑上的串口调试软件接收)
UART1->THR=ch;
//等待发送是否完成
while( !(UART1->LSR_b.THRE));
//while( !( UART1->LSR & UARTn_LSR_THRE ) );
return ch;
}
SPI 传输单个字节:
uint8_t drv_spi_read_write_byte( uint8_t TxByte )
{
uint8_t l_Data = 0;
//发送数据
//等待发送缓冲区为空
// HAL_USART_Transmit((USART1n_Type*)USART11,&TxByte,1,BLOCKING);
// HAL_USART_Receive((USART1n_Type*)USART11, &l_Data, 1,BLOCKING);
// USART11->DR = TxByte;
// HAL_USART_Receive((USART1n_Type*)USART11, &l_Data, 1,BLOCKING);
// UART1->THR=l_Data;
// USART11->DR = TxByte;
// drv_delay_us(200);
// l_Data=USART11->DR;
//UART1->THR=l_Data;
//while(!(USART11->ST&USART1n_SR_TXC));
//while(!(USART11->ST&USART1n_SR_RXC));
USART11->DR = TxByte;
while(!(USART11->ST_b.TXCn));
while(!(USART11->ST_b.RXCn));
l_Data=USART11->DR;
USART10->DR=l_Data;
USART11->ST_b.TXCn=1;//发送器空闲
// //等待接收缓冲区为空
// while(!(USART11->ST_b.RXCn));
return l_Data; //返回
}