|
- /************************************************************************
- * 模块名称:main.c
- * 程序功能:
- * 编 写 者:
- * 编写日期:2017-06-22
- * 修 改 者:
- * 修改日期:
- * 编译环境:KEIL4 MDK ARM V4.74
- * 硬件平台:STM32F103ZCT6
- ************************************************************************/
-
- /************************************************************************/
- /* */
- /* INCLUDES */
- /* */
- /************************************************************************/
- #include <stdio.h>
- #include <stm32f10x.h>
- #include <stm32f10x_dma.h>
- #include "share.h"
- #include "com.h"
- #include "stm32f10x_iwdg.h"
-
- /************************************************************************/
- /* */
- /* DEFINITION */
- /* */
- /************************************************************************/
-
-
- /************************************************************************/
- /* */
- /* DECLARATION */
- /* */
- /************************************************************************/
- void Init(void);
- void HFL_Init_RCC(void);
- void HFL_Init_GPIO(void);
- void HFL_Init_NVIC(void);
- void HFL_Init_USART(void);
- void HFL_Init_SYSTICK(void);
- //void HFL_Init_IWDG(void);
-
- /************************************************************************/
- /* */
- /* VARIABLE */
- /* */
- /************************************************************************/
- u32 g_SysTick = 0;
- uint8_t Dma_Rx_buffer[DMA_RECV_BUF_SIZE]; //, Dma_Rx_num;
- uint8_t Dma_Tx_buffer[DMA_SEND_BUF_SIZE];
-
-
- /************************************************************************/
- /* */
- /* IMPLEMENTATION */
- /* */
- /************************************************************************/
- /***********************************************************************
- * 函 数 名: main()
- * 功能描述:
- * 函数说明:
- * 输 入: 无
- * 返 回:
- * 设 计 者:TNT 日期:2015-07-22
- * 修 改 者:TNT 日期:2015-07-22
- ***********************************************************************/
- int main(void)
- {
- Init();
-
- AFL_Start_BootLoader();
- }
- /***********************************************************************
- * 函 数 名: Init()
- * 功能描述:
- * 函数说明:
- * 输 入: 无
- * 返 回:
- * 设 计 者:TNT 日期:2014-01-12
- * 修 改 者:TNT 日期:2014-01-12
- ***********************************************************************/
- void Init(void)
- {
- __enable_fiq();//开启中断 1017
- HFL_Init_RCC();
- HFL_Init_GPIO();
- HFL_Init_SYSTICK();
- HFL_Init_USART();
- HFL_Init_NVIC();
- }
- /***********************************************************************
- * 函 数 名: HFL_Init_RCC()
- * 功能描述: 时钟
- * 函数说明: 根据硬件需要另行具由针对性的设置
- * 输 入: 无
- * 返 回:
- * 设 计 者:TNT 日期:2014-01-12
- * 修 改 者:TNT 日期:2014-01-12
- ***********************************************************************/
- void HFL_Init_RCC(void)
- {
- SystemInit();
- RCC_ADCCLKConfig(RCC_PCLK2_Div8);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); //enable uart4
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); //dma2
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
- RCC_ClearFlag();
- }
- /***********************************************************************
- * 函 数 名: void SysTick_Init()
- * 功能描述: 系统时钟
- * 函数说明:
- * 输 入: 无
- * 返 回:
- * 设 计 者:TNT 日期:2014-01-12
- * 修 改 者:TNT 日期:2014-01-12
- ***********************************************************************/
- void HFL_Init_SYSTICK(void)
- {
- SysTick_Config(SystemCoreClock/1000); //1ms响应一次中断
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
- }
- /***********************************************************************
- * 函 数 名: HFL_Init_NVIC()
- * 功能描述:
- * 函数说明:
- * 输 入: 无
- * 返 回:
- * 设 计 者:TNT 日期:2014-01-12
- * 修 改 者:TNT 日期:2014-01-12
- ***********************************************************************/
- void HFL_Init_NVIC(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x0);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置优先级分组
-
- /* Enable and configure RCC global IRQ channel */
- NVIC_InitStructure.NVIC_IRQChannel = USART_IRQ;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- /*
- NVIC_InitStructure.NVIC_IRQChannel = USART_DMA_IRQ_RX;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel = USART_DMA_IRQ_TX;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- */
- }
- /***********************************************************************
- * 函 数 名: HFL_Init_USART1()
- * 功能描述:
- * 函数说明:
- * 输 入: 无
- * 返 回:
- * 设 计 者:TNT 日期:2014-01-12
- * 修 改 者:TNT 日期:2014-01-12
- ***********************************************************************/
- void HFL_Init_USART(void)
- {
- USART_InitTypeDef USART_InitStructure;
- DMA_InitTypeDef DMA_InitStructure; //定义DMA初始化结构体
-
- // USART init
- USART_InitStructure.USART_BaudRate = USART_BAUDRATE;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init(USART_NUM, &USART_InitStructure); //init
-
- // 串口-interrupt
- USART_ITConfig(USART_NUM, USART_IT_RXNE , DISABLE); //recv
- USART_ITConfig(USART_NUM, USART_IT_TC, DISABLE);// 使能串口发送完成中断
- USART_ITConfig(USART_NUM, USART_IT_IDLE, ENABLE); // 采用空闲中断,目的是在产生空闲中断时,说明接收或者发送已经结束,此时可以读取DMA中的数据了
-
- USART_Cmd(USART_NUM, ENABLE);//使能串口
- USART_ClearFlag(USART_NUM, USART_FLAG_TC); //clear flag
-
- //init dma for usart
- /* DMA1 Channel5 (triggered by USART1 Rx event) Config */
- DMA_DeInit(USART_DMA_CHANNEL_RX); //重置DMA 2通道配置
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART_NUM->DR);// 初始化外设地址,相当于“哪家快递”
- DMA_InitStructure.DMA_MemoryBaseAddr =(uint32_t)Dma_Rx_buffer;// 内存地址,相当于几号柜
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外设作为数据来源,即为收快递
- DMA_InitStructure.DMA_BufferSize = DMA_RECV_BUF_SIZE;// 缓存容量,即柜子大小
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址不递增,即柜子对应的快递不变
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// 内存递增
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设字节宽度,即快递运输快件大小度量(按重量算,还是按体积算)
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;// 内存字节宽度,即店主封装快递的度量(按重量,还是按体质进行封装)
- DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// 正常模式,即满了就不在接收了,而不是循环存储
- DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;// 优先级很高,对应快递就是加急
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; // 内存与外设通信,而非内存到内存
- DMA_Init(USART_DMA_CHANNEL_RX, &DMA_InitStructure);// 把参数初始化,即拟好与快递公司的协议
-
- //DMA_ITConfig(USART_DMA_CHANNEL_RX, DMA_IT_TC, ENABLE); //开USART2 Rx DMA中断 //开启传输缓冲完成中断
- //DMA_ITConfig(USART_DMA_CHANNEL_RX, DMA_IT_TE, ENABLE);
- DMA_Cmd(USART_DMA_CHANNEL_RX, ENABLE);// 启动DMA,即与快递公司签订合同,正式生效
-
- /* DMA1 Channel4 (triggered by USART1 Tx event) Config */
- DMA_DeInit(USART_DMA_CHANNEL_TX);
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART_NUM->DR); // 外设地址,串口1, 即发件的快递
- DMA_InitStructure.DMA_MemoryBaseAddr =(u32)Dma_Tx_buffer;// 发送内存地址
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;// 外设为传送数据目的地,即发送数据,即快递是发件
- DMA_InitStructure.DMA_BufferSize = 0; //发送长度为0,即未有快递需要发送
- DMA_Init(USART_DMA_CHANNEL_TX, &DMA_InitStructure);//初始化
-
- //DMA_ITConfig(USART_DMA_CHANNEL_TX, DMA_IT_TC, ENABLE); //开USART2 Tx DMA中断 //开启传输缓冲完成中断
- //DMA_ITConfig(USART_DMA_CHANNEL_TX, DMA_IT_TE, ENABLE);
- DMA_Cmd(USART_DMA_CHANNEL_TX, ENABLE);
-
- USART_DMACmd(USART_NUM, USART_DMAReq_Tx|USART_DMAReq_Rx, ENABLE);// 使能DMA串口发送和接受请求
-
- }
-
- /***********************************************************************
- * 函 数 名: HFL_Init_GPIO()
- * 功能描述: IO口
- * 函数说明:
- * 输 入: 无
- * 返 回:
- * 设 计 者:TNT 日期:2014-01-12
- * 修 改 者:TNT 日期:2014-01-12
- ***********************************************************************/
- void HFL_Init_GPIO(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /* Disable the Serial Wire Jtag Debug Port SWJ-DP */
- // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable | GPIO_Remap_USART1 , ENABLE); //???
-
- // 串口配置,工控机串口
- /* Configure USART Tx as alternate function push-pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_Tx;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIO_Remap_Tx, &GPIO_InitStructure);
-
- /* Configure USART Rx as input floating */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_Rx;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIO_Remap_Rx, &GPIO_InitStructure);
-
- }
-
- /******************* (C) COPYRIGHT 2017 LECOOAI *****END OF FILE****/
|