久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1590|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32呼吸燈程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:586669 發(fā)表于 2020-4-29 13:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include "stm32f10x.h"
  2. #include <stdio.h>
  3. uint8_t senddata_buffer[12] = "QST_DMA_TEST";
  4. void delay(void)
  5. {
  6.                 uint32_t volatile cnt = 0xFFFFF;
  7.                 while(cnt--);
  8. }

  9. void led_init(void)
  10. {
  11.                 GPIO_InitTypeDef GPIO_InitStruct;                                                                         // 定義GPIO初始化結(jié)構(gòu)體
  12.         
  13.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 開啟GPIOB的時(shí)鐘
  14.         
  15.                 // PB5->LED
  16.                 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;                                                         // 選擇第5個(gè)引腳進(jìn)行設(shè)置
  17.                 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;                         // 設(shè)置該引腳為通用推挽輸出模式
  18.                 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;                        // 設(shè)置該引腳的輸出頻率為50MHz
  19.                 GPIO_Init(GPIOB, &GPIO_InitStruct);                                                                        // 對(duì)該引腳進(jìn)行初始化
  20.                 GPIO_SetBits(GPIOB, GPIO_Pin_5);                                                                                 // LED OFF
  21. }

  22. void nvic_init(void)
  23. {
  24.                 NVIC_InitTypeDef NVIC_InitStruct;                                                                                // 定義NVIC初始化結(jié)構(gòu)體
  25.         
  26.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                        // 中斷優(yōu)先級(jí)分組1
  27.                 //配置EXIT0中斷
  28.                 NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;                                                // 設(shè)置EXTI0中斷
  29.                 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;        // 搶占優(yōu)先級(jí)設(shè)置為0
  30.                 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;                                        // 子優(yōu)先級(jí)設(shè)置為2
  31.                 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;                                                // 開啟EXTI0中斷
  32.                 NVIC_Init(&NVIC_InitStruct);                                                                                                                // 對(duì)EXTI0中斷進(jìn)行初始化

  33.                 //配置USART1中斷
  34.                 NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;          // 設(shè)置USART1中斷
  35.                 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;  //搶占優(yōu)先級(jí)設(shè)置為0
  36.                 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;                                        // 子優(yōu)先級(jí)設(shè)置為1
  37.                 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;                                                // 開啟USART1中斷
  38.                 NVIC_Init(&NVIC_InitStruct);                                                                                                                // 對(duì)USART1中斷進(jìn)行
  39.                 //配置TIM3中斷
  40.                 NVIC_InitStruct.NVIC_IRQChannel = TIM6_IRQn;            // 設(shè)置TIM6中斷
  41.                 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;  //搶占優(yōu)先級(jí)設(shè)置為0
  42.                 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;                                        // 子優(yōu)先級(jí)設(shè)置為0
  43.                 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;                                                // 開啟TIM6中斷
  44.                 NVIC_Init(&NVIC_InitStruct);                                                                // 對(duì)TIM6中斷
  45.                 //配置TIM3中斷
  46.           NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;            // 設(shè)置TIM6中斷
  47.                 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;  //搶占優(yōu)先級(jí)設(shè)置為0
  48.                 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3;                                        // 子優(yōu)先級(jí)設(shè)置為3
  49.                 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;                                                // 開啟TIM6中斷
  50.                 NVIC_Init(&NVIC_InitStruct);                                                                // 對(duì)TIM6中斷

  51. }

  52. void exti_init(void)
  53. {
  54.                 GPIO_InitTypeDef GPIO_InitStruct;                                                                         // 定義GPIO初始化結(jié)構(gòu)體
  55.                 EXTI_InitTypeDef EXTI_InitStruct;                                                                                // 定義EXTI初始化結(jié)構(gòu)體
  56.         
  57.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // 開啟GPIOA和AFIO的時(shí)鐘
  58.         
  59.                 // PA0->Key
  60.                 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;                                                        // 選擇第0個(gè)引腳進(jìn)行設(shè)置
  61.                 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;        // 設(shè)置該引腳為浮空輸入模式
  62.                 GPIO_Init(GPIOA, &GPIO_InitStruct);                                                                        // 對(duì)該引腳進(jìn)行初始化
  63.                
  64.                 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // PA0->EXTILine0
  65.                 EXTI_InitStruct.EXTI_Line = EXTI_Line0;                                                        // 選擇外部中斷線0
  66.                 EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;                // 設(shè)置EXTILine0為中斷模式
  67.                 EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;        // 設(shè)置觸發(fā)方式為上升沿觸發(fā)
  68.                 EXTI_InitStruct.EXTI_LineCmd = ENABLE;                                                        // 開啟EXTILine0
  69.                 EXTI_Init(&EXTI_InitStruct);                                                                                                // 對(duì)EXTILine0進(jìn)行初始化
  70. }

  71. void usart_init(void)
  72. {
  73.                 USART_InitTypeDef USART_InitStruct;                                                                                        // 定義USART初始化結(jié)構(gòu)體
  74.                 GPIO_InitTypeDef  GPIO_InitStruct;
  75.         
  76.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);        // 開啟USART1的時(shí)鐘
  77.         
  78.                 // PA9->Tx
  79.                 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;                                                                        // 選擇第9個(gè)引腳進(jìn)行設(shè)置
  80.                 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;                                                // 設(shè)置該引腳為復(fù)用推挽輸出
  81.                 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;                                        // 設(shè)置該引腳輸出速率為50MHz
  82.                 GPIO_Init(GPIOA, &GPIO_InitStruct);                                                                                        // 對(duì)該引腳進(jìn)行初始化
  83.         
  84.                 // PA10->Rx
  85.                 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;                                                                        // 選擇第10個(gè)引腳進(jìn)行配置
  86.                 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;                        // 設(shè)置該引腳為浮空輸入模式
  87.                 GPIO_Init(GPIOA, &GPIO_InitStruct);                                                                                        // 對(duì)該引腳進(jìn)行初始化
  88.         
  89.                 // USART1配置
  90.                 USART_InitStruct.USART_BaudRate = 115200;                                                                // 設(shè)置波特率為115200
  91.                 USART_InitStruct.USART_WordLength = USART_WordLength_8b;// 設(shè)置數(shù)據(jù)位為8位
  92.                 USART_InitStruct.USART_Parity = USART_Parity_No;                                // 不使用校驗(yàn)位
  93.                 USART_InitStruct.USART_StopBits = USART_StopBits_1;                        // 設(shè)置1位停止位
  94.                 USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;// 關(guān)閉硬件流控制
  95.                 USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // 開啟發(fā)送和接收功能
  96.                 USART_Init(USART1, &USART_InitStruct);                                                                        // 對(duì)USART1進(jìn)行初始化
  97.                
  98.                
  99.                 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);            // 開啟USART1的接受中斷
  100.                
  101.                 USART_Cmd(USART1, ENABLE);                                                                                                                        // 開啟USART1

  102. }

  103. // USART1發(fā)送字節(jié)函數(shù)
  104. void usart1_sendbyte(char sendbyte)
  105. {
  106.                 USART_SendData(USART1, sendbyte);                                                                                                                // 發(fā)送一個(gè)字節(jié)
  107.                 while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));// 等待數(shù)據(jù)寄存器為空
  108. }

  109. // USART1發(fā)送字符串函數(shù)
  110. void usart1_sendstring(char *sendstring)
  111. {
  112.                 uint8_t cnt = 0;
  113.                 do
  114.                 {
  115.                                 usart1_sendbyte(*(sendstring + cnt));
  116.                                 cnt++;
  117.                 }
  118.                 while(*(sendstring + cnt) != '\0');                        // 發(fā)送字符串
  119.                
  120.                 while(!USART_GetFlagStatus(USART1, USART_FLAG_TC)); // 判斷字符串是否發(fā)送完成
  121. }

  122. void tim_init(void)
  123. {
  124.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;//定義定時(shí)器時(shí)基初始化結(jié)構(gòu)體
  125.         TIM_OCInitTypeDef TIM_OCInitStruct;//定義輸出比較初始化結(jié)構(gòu)體
  126.         GPIO_InitTypeDef GPIO_InitStruct;//定義GPIO初始化結(jié)構(gòu)體
  127.         
  128.         //TIM6配置
  129.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 | RCC_APB1Periph_TIM3,ENABLE);//開啟TIM6和TIM3的時(shí)鐘
  130.         
  131.         TIM_TimeBaseStruct.TIM_Prescaler = (7200 - 1);
  132.         TIM_TimeBaseStruct.TIM_Period = (10000 - 1);
  133.         TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;//設(shè)置定時(shí)器計(jì)數(shù)模式
  134.         TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;//設(shè)置時(shí)鐘分隔
  135.         TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;//設(shè)置時(shí)鐘重復(fù)為0
  136.         TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStruct);//設(shè)置初始化
  137.         
  138.         TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
  139.         TIM_Cmd(TIM6,ENABLE);
  140.         //TIM3配置,PB0->TIM3_CH3  PWM
  141.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
  142.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  143.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  144.         GPIO_Init(GPIOB,&GPIO_InitStruct);
  145.         
  146.         //TIM3時(shí)基部分
  147.         TIM_TimeBaseStruct.TIM_Prescaler = (72 - 1);
  148.         TIM_TimeBaseStruct.TIM_Period = (100 - 1);//10KMZ
  149.         TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;//設(shè)置定時(shí)器計(jì)數(shù)模式
  150.         TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;//設(shè)置時(shí)鐘分隔,不分頻
  151.         TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;//設(shè)置時(shí)鐘重復(fù)為0
  152.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);//設(shè)置初始化

  153.         //TIM3輸出比較部分
  154.         TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式
  155.         TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
  156.         TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
  157.         TIM_OCInitStruct.TIM_Pulse = 0;
  158.         TIM_OC3Init(TIM3,&TIM_OCInitStruct);//對(duì)TIM3的CH3初始化
  159.         TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);//開啟TIM3的預(yù)加載寄存器
  160.         
  161.         
  162.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//開啟TIM3的中斷
  163.         TIM_Cmd(TIM3,ENABLE);//開啟TIM3
  164.         
  165.         
  166. }
  167. //void dma_init(void)
  168. //{
  169. //   DMA_InitTypeDef  DMA_InitStuct;
  170. //        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//開啟DMA1時(shí)鐘
  171. //        DMA_InitStuct.DMA_PeripheralBaseAddr = USART1_BASE+0x04;/*(uint32_t)USART1->DR; *///指定外設(shè)地址
  172. //        DMA_InitStuct.DMA_MemoryBaseAddr = (uint32_t)senddata_buffer;//指定存儲(chǔ)器地址
  173. //        DMA_InitStuct.DMA_DIR = DMA_DIR_PeripheralDST;
  174. //        DMA_InitStuct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  175. //        DMA_InitStuct.DMA_MemoryInc = DMA_MemoryInc_Enable;
  176. //        DMA_InitStuct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  177. //        DMA_InitStuct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  178. //        DMA_InitStuct.DMA_BufferSize = 12;
  179. //        DMA_InitStuct.DMA_Mode = DMA_Mode_Normal;
  180. //        DMA_InitStuct.DMA_Priority = DMA_Priority_High;
  181. //        DMA_InitStuct.DMA_M2M = DMA_M2M_Disable;
  182. //        DMA_Init(DMA1_Channel4,&DMA_InitStuct);
  183. //        DMA_Cmd(DMA1_Channel4,ENABLE);
  184. //}

  185. /**
  186.   * @brief  Main program.
  187.   * @param  None
  188.   * @retval None
  189.   */
  190. int main(void)
  191. {
  192.         led_init();         // LED初始化函數(shù)
  193.         nvic_init();        // NVIC配置函數(shù)
  194.         exti_init();        // EXTI配置函數(shù)
  195.         usart_init();        // USART配置函數(shù)
  196.         tim_init();   //TIM配置函數(shù)
  197. //        dma_init();  //DMA配置函數(shù)
  198. //        USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//USART1向DMA1發(fā)送T請(qǐng)求
  199.         
  200. //        usart1_sendstring("This is a testing\n");
  201. //        usart1_sendstring("Hello STM32\n");

  202.   /* Infinite loop */
  203.   while (1)
  204.   {
  205. //                GPIO_ResetBits(GPIOB, GPIO_Pin_5);         // LED ON
  206. //                delay();
  207. //                GPIO_SetBits(GPIOB, GPIO_Pin_5);                 // LED OFF
  208. //                delay();
  209.   }
  210. }

復(fù)制代碼


4.27.7z

177.75 KB, 下載次數(shù): 17, 下載積分: 黑幣 -5

stm32f103野火開發(fā)板

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91在线视频一区 | 天天干视频 | 麻豆成人在线视频 | 亚洲午夜精品 | 久久一二区 | 日韩中文一区二区三区 | 日本淫视频 | 国产美女在线观看 | h在线播放 | 一级做a爰片性色毛片16美国 | 91xxx在线观看 | 中文字幕 国产 | 午夜激情一区 | 91在线中文字幕 | 羞羞视频免费在线 | 成人av在线网站 | 涩涩片影院| 亚洲xxxxx | 九九在线视频 | 国产高清在线精品一区二区三区 | 国产精品毛片av一区 | 午夜视频在线观看网站 | 日日干日日操 | 久久精品一区二区三区四区 | 久久成人国产精品 | 亚洲综合资源 | 18成人在线观看 | 能看的av| 欧美成视频 | 中文字幕日韩专区 | 三级免费av | 久久综合狠狠综合久久综合88 | 99pao成人国产永久免费视频 | 四虎最新地址 | 日日干日日操 | 国产日韩欧美精品一区二区 | 99精品欧美一区二区蜜桃免费 | 国产伦一区二区三区久久 | 在线观看视频一区 | 国产亚洲一区精品 | 欧美一区二区三区久久精品 |