|
- #include "stm32f10x.h"
- #include <stdio.h>
- uint8_t senddata_buffer[12] = "QST_DMA_TEST";
- void delay(void)
- {
- uint32_t volatile cnt = 0xFFFFF;
- while(cnt--);
- }
- void led_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct; // 定義GPIO初始化結(jié)構(gòu)體
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 開啟GPIOB的時(shí)鐘
-
- // PB5->LED
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; // 選擇第5個(gè)引腳進(jìn)行設(shè)置
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 設(shè)置該引腳為通用推挽輸出模式
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 設(shè)置該引腳的輸出頻率為50MHz
- GPIO_Init(GPIOB, &GPIO_InitStruct); // 對(duì)該引腳進(jìn)行初始化
- GPIO_SetBits(GPIOB, GPIO_Pin_5); // LED OFF
- }
- void nvic_init(void)
- {
- NVIC_InitTypeDef NVIC_InitStruct; // 定義NVIC初始化結(jié)構(gòu)體
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // 中斷優(yōu)先級(jí)分組1
- //配置EXIT0中斷
- NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; // 設(shè)置EXTI0中斷
- NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; // 搶占優(yōu)先級(jí)設(shè)置為0
- NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; // 子優(yōu)先級(jí)設(shè)置為2
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 開啟EXTI0中斷
- NVIC_Init(&NVIC_InitStruct); // 對(duì)EXTI0中斷進(jìn)行初始化
- //配置USART1中斷
- NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; // 設(shè)置USART1中斷
- NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //搶占優(yōu)先級(jí)設(shè)置為0
- NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; // 子優(yōu)先級(jí)設(shè)置為1
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 開啟USART1中斷
- NVIC_Init(&NVIC_InitStruct); // 對(duì)USART1中斷進(jìn)行
- //配置TIM3中斷
- NVIC_InitStruct.NVIC_IRQChannel = TIM6_IRQn; // 設(shè)置TIM6中斷
- NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //搶占優(yōu)先級(jí)設(shè)置為0
- NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; // 子優(yōu)先級(jí)設(shè)置為0
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 開啟TIM6中斷
- NVIC_Init(&NVIC_InitStruct); // 對(duì)TIM6中斷
- //配置TIM3中斷
- NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; // 設(shè)置TIM6中斷
- NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //搶占優(yōu)先級(jí)設(shè)置為0
- NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; // 子優(yōu)先級(jí)設(shè)置為3
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 開啟TIM6中斷
- NVIC_Init(&NVIC_InitStruct); // 對(duì)TIM6中斷
- }
- void exti_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct; // 定義GPIO初始化結(jié)構(gòu)體
- EXTI_InitTypeDef EXTI_InitStruct; // 定義EXTI初始化結(jié)構(gòu)體
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // 開啟GPIOA和AFIO的時(shí)鐘
-
- // PA0->Key
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; // 選擇第0個(gè)引腳進(jìn)行設(shè)置
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 設(shè)置該引腳為浮空輸入模式
- GPIO_Init(GPIOA, &GPIO_InitStruct); // 對(duì)該引腳進(jìn)行初始化
-
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // PA0->EXTILine0
- EXTI_InitStruct.EXTI_Line = EXTI_Line0; // 選擇外部中斷線0
- EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; // 設(shè)置EXTILine0為中斷模式
- EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; // 設(shè)置觸發(fā)方式為上升沿觸發(fā)
- EXTI_InitStruct.EXTI_LineCmd = ENABLE; // 開啟EXTILine0
- EXTI_Init(&EXTI_InitStruct); // 對(duì)EXTILine0進(jìn)行初始化
- }
- void usart_init(void)
- {
- USART_InitTypeDef USART_InitStruct; // 定義USART初始化結(jié)構(gòu)體
- GPIO_InitTypeDef GPIO_InitStruct;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 開啟USART1的時(shí)鐘
-
- // PA9->Tx
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; // 選擇第9個(gè)引腳進(jìn)行設(shè)置
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; // 設(shè)置該引腳為復(fù)用推挽輸出
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 設(shè)置該引腳輸出速率為50MHz
- GPIO_Init(GPIOA, &GPIO_InitStruct); // 對(duì)該引腳進(jìn)行初始化
-
- // PA10->Rx
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; // 選擇第10個(gè)引腳進(jìn)行配置
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 設(shè)置該引腳為浮空輸入模式
- GPIO_Init(GPIOA, &GPIO_InitStruct); // 對(duì)該引腳進(jìn)行初始化
-
- // USART1配置
- USART_InitStruct.USART_BaudRate = 115200; // 設(shè)置波特率為115200
- USART_InitStruct.USART_WordLength = USART_WordLength_8b;// 設(shè)置數(shù)據(jù)位為8位
- USART_InitStruct.USART_Parity = USART_Parity_No; // 不使用校驗(yàn)位
- USART_InitStruct.USART_StopBits = USART_StopBits_1; // 設(shè)置1位停止位
- USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;// 關(guān)閉硬件流控制
- USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // 開啟發(fā)送和接收功能
- USART_Init(USART1, &USART_InitStruct); // 對(duì)USART1進(jìn)行初始化
-
-
- USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); // 開啟USART1的接受中斷
-
- USART_Cmd(USART1, ENABLE); // 開啟USART1
- }
- // USART1發(fā)送字節(jié)函數(shù)
- void usart1_sendbyte(char sendbyte)
- {
- USART_SendData(USART1, sendbyte); // 發(fā)送一個(gè)字節(jié)
- while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));// 等待數(shù)據(jù)寄存器為空
- }
- // USART1發(fā)送字符串函數(shù)
- void usart1_sendstring(char *sendstring)
- {
- uint8_t cnt = 0;
- do
- {
- usart1_sendbyte(*(sendstring + cnt));
- cnt++;
- }
- while(*(sendstring + cnt) != '\0'); // 發(fā)送字符串
-
- while(!USART_GetFlagStatus(USART1, USART_FLAG_TC)); // 判斷字符串是否發(fā)送完成
- }
- void tim_init(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;//定義定時(shí)器時(shí)基初始化結(jié)構(gòu)體
- TIM_OCInitTypeDef TIM_OCInitStruct;//定義輸出比較初始化結(jié)構(gòu)體
- GPIO_InitTypeDef GPIO_InitStruct;//定義GPIO初始化結(jié)構(gòu)體
-
- //TIM6配置
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 | RCC_APB1Periph_TIM3,ENABLE);//開啟TIM6和TIM3的時(shí)鐘
-
- TIM_TimeBaseStruct.TIM_Prescaler = (7200 - 1);
- TIM_TimeBaseStruct.TIM_Period = (10000 - 1);
- TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;//設(shè)置定時(shí)器計(jì)數(shù)模式
- TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;//設(shè)置時(shí)鐘分隔
- TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;//設(shè)置時(shí)鐘重復(fù)為0
- TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStruct);//設(shè)置初始化
-
- TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
- TIM_Cmd(TIM6,ENABLE);
- //TIM3配置,PB0->TIM3_CH3 PWM
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStruct);
-
- //TIM3時(shí)基部分
- TIM_TimeBaseStruct.TIM_Prescaler = (72 - 1);
- TIM_TimeBaseStruct.TIM_Period = (100 - 1);//10KMZ
- TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;//設(shè)置定時(shí)器計(jì)數(shù)模式
- TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;//設(shè)置時(shí)鐘分隔,不分頻
- TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;//設(shè)置時(shí)鐘重復(fù)為0
- TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);//設(shè)置初始化
- //TIM3輸出比較部分
- TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式
- TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
- TIM_OCInitStruct.TIM_Pulse = 0;
- TIM_OC3Init(TIM3,&TIM_OCInitStruct);//對(duì)TIM3的CH3初始化
- TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);//開啟TIM3的預(yù)加載寄存器
-
-
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//開啟TIM3的中斷
- TIM_Cmd(TIM3,ENABLE);//開啟TIM3
-
-
- }
- //void dma_init(void)
- //{
- // DMA_InitTypeDef DMA_InitStuct;
- // RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//開啟DMA1時(shí)鐘
- // DMA_InitStuct.DMA_PeripheralBaseAddr = USART1_BASE+0x04;/*(uint32_t)USART1->DR; *///指定外設(shè)地址
- // DMA_InitStuct.DMA_MemoryBaseAddr = (uint32_t)senddata_buffer;//指定存儲(chǔ)器地址
- // DMA_InitStuct.DMA_DIR = DMA_DIR_PeripheralDST;
- // DMA_InitStuct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- // DMA_InitStuct.DMA_MemoryInc = DMA_MemoryInc_Enable;
- // DMA_InitStuct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
- // DMA_InitStuct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- // DMA_InitStuct.DMA_BufferSize = 12;
- // DMA_InitStuct.DMA_Mode = DMA_Mode_Normal;
- // DMA_InitStuct.DMA_Priority = DMA_Priority_High;
- // DMA_InitStuct.DMA_M2M = DMA_M2M_Disable;
- // DMA_Init(DMA1_Channel4,&DMA_InitStuct);
- // DMA_Cmd(DMA1_Channel4,ENABLE);
- //}
- /**
- * @brief Main program.
- * @param None
- * @retval None
- */
- int main(void)
- {
- led_init(); // LED初始化函數(shù)
- nvic_init(); // NVIC配置函數(shù)
- exti_init(); // EXTI配置函數(shù)
- usart_init(); // USART配置函數(shù)
- tim_init(); //TIM配置函數(shù)
- // dma_init(); //DMA配置函數(shù)
- // USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//USART1向DMA1發(fā)送T請(qǐng)求
-
- // usart1_sendstring("This is a testing\n");
- // usart1_sendstring("Hello STM32\n");
- /* Infinite loop */
- while (1)
- {
- // GPIO_ResetBits(GPIOB, GPIO_Pin_5); // LED ON
- // delay();
- // GPIO_SetBits(GPIOB, GPIO_Pin_5); // LED OFF
- // delay();
- }
- }
復(fù)制代碼
|
-
-
4.27.7z
2020-4-29 18:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
177.75 KB, 下載次數(shù): 17, 下載積分: 黑幣 -5
stm32f103野火開發(fā)板
|