The program can't run into the interrupt function, as I send some hex number to stm32? I try to use the function DMA_GetCurrDataCounter(), but the value change strangely.
int main(void)
{
/* 程序来到main函数之前,启动文件:statup_stm32f4xx.s已经调用
* SystemInit()函数把系统时钟初始化成168MHZ
* SystemInit()在system_stm32f4xx.c中定义
* 如果用户想修改系统时钟,可自行编写程序修改
*/
/* add your code here ^_^. */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
bsp_USART_init();
bsp_USART_dma_init();
// char i='1';
while(1)
{
bsp_Usart_SendByte(USART1, DMA_GetCurrDataCounter(DMA2_Stream5));
delay_ms(1000);
if(flag == 1)
{
bsp_Usart_SendByte(USART1, usart_buffer[0]);
bsp_Usart_SendByte(USART1, usart_buffer[1]);
bsp_Usart_SendByte(USART1, usart_buffer[2]);
bsp_Usart_SendByte(USART1, usart_buffer[3]);
}
}
}
void bsp_USART_init()
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
GPIO_InitTypeDef gpio_initstructure;
gpio_initstructure.GPIO_Pin = GPIO_Pin_9;
gpio_initstructure.GPIO_Mode = GPIO_Mode_AF;
gpio_initstructure.GPIO_Speed = GPIO_Speed_50MHz;
gpio_initstructure.GPIO_OType = GPIO_OType_PP;
gpio_initstructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &gpio_initstructure);
gpio_initstructure.GPIO_Pin = GPIO_Pin_10;
gpio_initstructure.GPIO_Mode = GPIO_Mode_AF;
gpio_initstructure.GPIO_Speed = GPIO_Speed_50MHz;
gpio_initstructure.GPIO_OType = GPIO_OType_PP;
gpio_initstructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &gpio_initstructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
USART_InitTypeDef USART_InitTypeDef;
USART_InitTypeDef.USART_BaudRate = 115200;
USART_InitTypeDef.USART_WordLength = USART_WordLength_8b;
USART_InitTypeDef.USART_StopBits = USART_StopBits_1;
USART_InitTypeDef.USART_Parity = USART_Parity_No;
USART_InitTypeDef.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
USART_InitTypeDef.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART1, &USART_InitTypeDef);
USART_Cmd(USART1,ENABLE);
// USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
// NVIC_InitTypeDef nvic_initstructure;
// nvic_initstructure.NVIC_IRQChannel = USART1_IRQn;
// nvic_initstructure.NVIC_IRQChannelPreemptionPriority = 2;
// nvic_initstructure.NVIC_IRQChannelSubPriority = 2;
// nvic_initstructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_Init(&nvic_initstructure);
}
void bsp_USART_dma_init()
{
DMA_DeInit(DMA2_Stream5);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
while (DMA_GetCmdStatus(DMA2_Stream5) != DISABLE);
USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
DMA_InitTypeDef dma_initstructure;
dma_initstructure.DMA_Channel = DMA_Channel_4;
dma_initstructure.DMA_PeripheralBaseAddr = USART1_BASE;
dma_initstructure.DMA_Memory0BaseAddr = (uint32_t)usart_buffer;
dma_initstructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
dma_initstructure.DMA_BufferSize = 4;
dma_initstructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
dma_initstructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
dma_initstructure.DMA_PeripheralDataSize = 8;
dma_initstructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
dma_initstructure.DMA_Mode = DMA_Mode_Normal;
dma_initstructure.DMA_Priority = DMA_Priority_VeryHigh;
dma_initstructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
DMA_Init(DMA2_Stream5, &dma_initstructure);
DMA_Cmd(DMA2_Stream5, ENABLE);
DMA_ITConfig(DMA2_Stream5, DMA_IT_TC, ENABLE);
while(DMA_GetCmdStatus(DMA2_Stream5) != ENABLE);
}
extern uint8_t flag;
void DMA2_IRQHandler()
{
// bsp_Usart_SendByte(USART1, 0xA1);
DMA_ClearITPendingBit(DMA2_Stream5, DMA_IT_TCIF5);
flag = 1;
}
The program can't run into the interrupt function, as I send some hex number to stm32? I try to use the function DMA_GetCurrDataCounter(), but the value change strangely.