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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

麻雀雖小,五臟俱全之【STM32F042 Nucleo32】評測 串口+GPIO SPI驅(qū)動OLED程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
    2014年,ST意法半導(dǎo)體發(fā)布了集自由、靈活、易用、可擴(kuò)展、便宜等優(yōu)點(diǎn)于一身的Nucleo64系列開發(fā)平臺深受工程師喜愛。
      2015年,ST意法半導(dǎo)體發(fā)布了Nucleo32系列,Nucleo32與Nucleo64相比較,雖說引腳少了一般,但是,體積小了5倍,功能齊全,可謂是
麻雀雖小,五臟俱全,同時(shí),Nucleo32兼容Arduino Nano的擴(kuò)展接口,使之具有非常強(qiáng)大的可擴(kuò)展性。
      
包裝上,Nucleo沒有任何一點(diǎn)改變,但是從圖上看出,Nucleo32體積真的非常小。那么問題來了,這么小,板子帶ST-Link開發(fā)仿真工具嗎?
答案是肯定的,不然怎么會說麻雀雖小,五臟俱全呢?下面讓我們一起欣賞一下這STM32F042-Nucleo32開發(fā)板吧!

STM32F042K6T6,基于Cortex-M0架構(gòu),運(yùn)行頻率最大48Mhz,具有32K Flash, 6K SRAM的強(qiáng)大芯片資源,可謂是開發(fā)無壓力!
同時(shí)nucleo兼容Arduion Nano,讓nucleo具備強(qiáng)大的Arduion生態(tài)圈開發(fā)手段!
板載ST-LINK/V2-1仿真器,具備在線仿真,虛擬串口調(diào)試等功能,讓開發(fā)者只需要一根microUSB線即可完成仿真,串口通信等功能。
同時(shí)nucleo支持mbed的云平臺開發(fā)功能!


板子正面,具有一個(gè)microUSB接口,主芯片,電源管理芯片,復(fù)位按鍵燈,引腳排列在兩邊,同時(shí),板子采用4層板結(jié)構(gòu),讓板子面積
更小,性能更加穩(wěn)定!

STlink,降壓芯片等位于板子底面,同時(shí)將仿真接口引出,使開發(fā)者可以使之參加開發(fā)者自己的板子調(diào)試功能,整塊nucleo板子體積跟
市面上販?zhǔn)鄣腟Tlink體積幾乎無差別。


接上電腦后,電腦會顯示一個(gè)NODE-F042K6的盤符,同時(shí)nucleo板子上的LED會勻速閃爍,我們也可以發(fā)現(xiàn),在板子引腳上看到一個(gè)
跳線帽,當(dāng)跳線帽被拔出后,Nucleo板子上的LED閃爍速度會變快。


小結(jié)
簡單介紹了ST最新推出的STM32F042 Nucleo32開發(fā)板,板子兼容Arduino Nano接口設(shè)計(jì),板載STLink/V2-1,支持ARM mbed在線編譯器以及第三方IDE開發(fā)工具,簡單,易用,方便,是作為我們開發(fā)者學(xué)習(xí)和開發(fā)產(chǎn)品的非常好的一個(gè)選擇!

STM32F042評測之:玩玩串口+GPIO
    添加味道,上午對STM32F042做了比較簡單的介紹,現(xiàn)在我們來讓nucleo32跑起來!
    為了省時(shí),我使用了CubeMx作為架構(gòu)生成平臺:
STEP 1:
        打開CubeMx軟件,并且選擇Board Selector,Verdor選擇默認(rèn),Type of board 選擇Nucleo32,Mcu Series選擇STM32F0,然后確定完成
芯片,板型號選擇步驟。


STEP 2:
進(jìn)行引腳,外設(shè)配置,在這里,芯片默認(rèn)會使用內(nèi)部RC8M作為系統(tǒng)時(shí)鐘,哥不喜歡,哥喜歡快,所以點(diǎn)擊Clock Configuration:顯示時(shí)鐘配置界面,
然后選用HSI RC 48Mhz作為系統(tǒng)時(shí)鐘,詳細(xì)配置如圖所示:

然后,我們繼續(xù)進(jìn)行芯片外設(shè)引腳配置,第一,使用uart2(nuceleo32 F042使用usart2連接stlink 的vcp)所以我們不需要另外的轉(zhuǎn)串口工具。
配置如圖所示:

我們采用異步串口,所以選用Asynchronous,這里我們還沒有完畢,我們還需要配置uart的參數(shù),我們采用115200,8-n-1配置
1、點(diǎn)擊configuration:
2、雙擊connectivity中的USART2
3、Baud Rate選項(xiàng)輸入115200
4、Word Length 選擇8bit,其他保持默認(rèn)
5、點(diǎn)擊Apply,OK
6、此時(shí)我們已經(jīng)完成了串口的發(fā)送,接收功能配置


接下來,我們配置LED,板載LED連接PB3
所以我直接配置PB3為output,其實(shí)我們可以看出,芯片默認(rèn)已經(jīng)有串口的引腳配置了,我們只需要使能Usart2即可,如果沒有
我們也可以設(shè)置PA2為USART2_TX,PA15為USART2_RX
配置好后,如下圖所示

SETP 3:
這樣,板子硬件我們已經(jīng)配置好了,接下來就是生成工程,點(diǎn)擊toolbar上的齒輪符號(Generate source code based on user settings),
會彈出Project settings窗口,分別輸入project name(項(xiàng)目名) project location(項(xiàng)目路徑) IDE(項(xiàng)目工作平臺),
然后切換到Code Generator界面并且按照如下如所示設(shè)置即可:

最后我們按確定,open project,項(xiàng)目環(huán)境就建立好了

STEP 4:
編輯User Code:
編輯LED的翻轉(zhuǎn)函數(shù)
  1.     #define LED_PORT            GPIOB
  2.     #define LED_PIN             GPIO_PIN_3
  3.     #define LED_GREEN_TOGGLE    HAL_GPIO_TogglePin(LED_PORT,LED_PIN)
復(fù)制代碼
編輯main函數(shù):
  1.     /* USER CODE BEGIN WHILE */
  2.       while (1)
  3.       {
  4.         uint32_t wSysClock;
  5.         /* USER CODE END WHILE */

  6.         /* USER CODE BEGIN 3 */
  7.         wSysClock = HAL_RCC_GetSysClockFreq();
  8.         printf("System Clock is :%ld",wSysClock);
  9.         HAL_UART_Transmit(&huart2,"my name is inc",sizeof("my name is inc"),1000);
  10.         LED_GREEN_TOGGLE;
  11.         HAL_Delay(1000);
  12.       }
  13.       /* USER CODE END 3 */
復(fù)制代碼
因?yàn)槲覀冊趍ain中使用了printf,所以我們需要重定向printf函數(shù):
我們打開usart.c
在user code區(qū)域中添加一下代碼:
  1.     #pragma import(__use_no_semihosting)            
  2.                
  3.     struct __FILE
  4.     {
  5.             int handle;
  6.             /* Whatever you require here. If the only file you are using is */
  7.             /* standard output using printf() for debugging, no file handling */
  8.             /* is required. */
  9.     };
  10.     /* FILE is typedef’ d in stdio.h. */
  11.     FILE __stdout;      

  12.     void _sys_exit(int x)
  13.     {
  14.             x = x;
  15.     }

  16.     int fputc(int ch, FILE *f)
  17.     {      
  18.             while((USART2->ISR&0X40)==0);  
  19.             USART2->TDR = (uint8_t) ch;      
  20.             return ch;
  21.     }
復(fù)制代碼

最后我們編譯工程,并且下載,對于軟件生成的工程,默認(rèn)是沒有設(shè)置stlink下載后的工作的,所以我們可以點(diǎn)擊option,debug,stlink,setting,flash download,然后勾選reset and run,最后確定返回。
最后一步,下載工程。
以下是運(yùn)行現(xiàn)象:



-------------------------------------------------------------
STM32F042 Nucleo32評測之SPI驅(qū)動OLED
   晚上回到家,小睡一下覺得無聊,試試用 STM32F042來玩玩OLED,硬件平臺當(dāng)然是我們的Nucleo32主角了。
OLED驅(qū)動方式有很多,而我手上的OLED接口均為SPI,SPI速度快,占用IO少,比IIC速度快許多,適合刷屏。
關(guān)于SPi,為了省時(shí)間,我么仍然用CubeMx軟件生成。

首先,打開我們之前的工程。按照之前的步驟在Pin界面上配置外設(shè),由于我們的OLED具有SPI加普通IO組成,
所以,我們打開SPI,模式選用Transmit Only Master,因?yàn)镺LED的SPI模式下是沒法進(jìn)行讀取的,所以我們也不需要
設(shè)置雙工了,直接發(fā)送即可,另外,我們還得設(shè)置軟件SPI_CS,OLED_REC, OLED_DC這3個(gè)控制IO,均設(shè)置為Output,
具體請看下圖:

然后,我們選中Configuration,并且雙擊SPI1,設(shè)置DataSize為8bit,F(xiàn)irst Bit為MSB First(高位在前),分頻系數(shù)為4,即
SPI時(shí)鐘速度為12Mbit/s, Clock Polarity(CPOL)為Low,CLOCK Phase(CPHA)為1 Edge,具體請看下圖:
然后點(diǎn)擊Apply, OK。

然后我們就可以生成工程了。

最后,我們把寫好的OLED驅(qū)動文件加進(jìn)工程,修改GPIO和OLED寫數(shù)據(jù)命令函數(shù)即可結(jié)束:
關(guān)于詳細(xì)修改,請看附件工程!


最后,我們把OLED驅(qū)動起來看看效果:


最后的最后,源代碼工程附上:編譯IDE:MDKV5
因?yàn)楦郊腛LED代碼是完全由樓主自己想自己寫出來的,所以可能寫得比較難懂,沒有其他的好看,所以喜歡的用自己的
驅(qū)動文件代替即可
Demo.rar (833.68 KB, 下載次數(shù): 60)

小結(jié):前面幾個(gè)工程,建立起來只需要幾分鐘,足以體現(xiàn)出Nucleo32與CubeMx聯(lián)合起來的強(qiáng)大之處,雖然樓主很少用
CubeMx,但是作為學(xué)習(xí)還是非常不錯(cuò)的!偷懶的時(shí)候這是很不錯(cuò)的工具!

  1. /**
  2.   ******************************************************************************
  3.   * File Name          : main.c
  4.   * Description        : Main program body
  5.   ******************************************************************************
  6.   *
  7.   * COPYRIGHT(c) 2016 STMicroelectronics
  8.   *
  9.   * Redistribution and use in source and binary forms, with or without modification,
  10.   * are permitted provided that the following conditions are met:
  11.   *   1. Redistributions of source code must retain the above copyright notice,
  12.   *      this list of conditions and the following disclaimer.
  13.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  14.   *      this list of conditions and the following disclaimer in the documentation
  15.   *      and/or other materials provided with the distribution.
  16.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  17.   *      may be used to endorse or promote products derived from this software
  18.   *      without specific prior written permission.
  19.   *
  20.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  23.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  24.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  26.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  27.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  28.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30.   *
  31.   ******************************************************************************
  32.   */
  33. /* Includes ------------------------------------------------------------------*/
  34. #include "stm32f0xx_hal.h"
  35. #include "spi.h"
  36. #include "usart.h"
  37. #include "gpio.h"

  38. /* USER CODE BEGIN Includes */
  39. #include "stdio.h"
  40. #include "bsp_OLED12864.h"

  41. /* USER CODE END Includes */

  42. /* Private variables ---------------------------------------------------------*/

  43. /* USER CODE BEGIN PV */
  44. /* Private variables ---------------------------------------------------------*/
  45. #define LED_PORT            GPIOB
  46. #define LED_PIN             GPIO_PIN_3
  47. #define LED_GREEN_TOGGLE    HAL_GPIO_TogglePin(LED_PORT,LED_PIN)
  48. /* USER CODE END PV */

  49. /* Private function prototypes -----------------------------------------------*/
  50. void SystemClock_Config(void);

  51. /* USER CODE BEGIN PFP */
  52. /* Private function prototypes -----------------------------------------------*/

  53. /* USER CODE END PFP */

  54. /* USER CODE BEGIN 0 */

  55. /* USER CODE END 0 */

  56. int main(void)
  57. {

  58.   /* USER CODE BEGIN 1 */

  59.   /* USER CODE END 1 */

  60.   /* MCU Configuration----------------------------------------------------------*/

  61.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  62.   HAL_Init();

  63.   /* Configure the system clock */
  64.   SystemClock_Config();

  65.   /* Initialize all configured peripherals */
  66.   MX_GPIO_Init();
  67.   MX_SPI1_Init();
  68.   MX_USART2_UART_Init();

  69.   /* USER CODE BEGIN 2 */
  70.     bsp_OLED_Init();
  71.     //OLED_DrawArea(0,0,100,100,1);
  72.     OLED_DrawFrame(0,0,50,50,1);
  73.     Repaint();

  74.   /* USER CODE END 2 */

  75.   /* Infinite loop */
  76.   /* USER CODE BEGIN WHILE */
  77.   while (1)
  78.   {
  79.       uint32_t wSysClock;
  80.   /* USER CODE END WHILE */

  81.   /* USER CODE BEGIN 3 */
  82.     wSysClock = HAL_RCC_GetSysClockFreq();
  83.     printf("System Clock is :%ld",wSysClock);
  84.     HAL_UART_Transmit(&huart2,"my name is inc",sizeof("my name is inc"),1000);
  85.     LED_GREEN_TOGGLE;
  86.     HAL_Delay(1000);
  87.   }
  88.   /* USER CODE END 3 */

  89. }

  90. /** System Clock Configuration
  91. */
  92. void SystemClock_Config(void)
  93. {

  94.   RCC_OscInitTypeDef RCC_OscInitStruct;
  95.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  96.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;
  97.   RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  98.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  99.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI48;
  100.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL2;
  101.   RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV2;
  102.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  103.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  104.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  105.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  106.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  107.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);

  108.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  109.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  110.   /* SysTick_IRQn interrupt configuration */
  111.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  112. }

  113. /* USER CODE BEGIN 4 */

  114. /* USER CODE END 4 */

  115. #ifdef USE_FULL_ASSERT

  116. /**
  117.    * @brief Reports the name of the source file and the source line number
  118.    * where the assert_param error has occurred.
  119.    * @param file: pointer to the source file name
  120.    * @param line: assert_param error line source number
  121.    * @retval None
  122.    */
  123. void assert_failed(uint8_t* file, uint32_t line)
  124. {
  125.   /* USER CODE BEGIN 6 */
  126.   /* User can add his own implementation to report the file name and line number,
  127.     ex: printf("Wrong parameters value: file %s on line %d", file, line) */
  128.   /* USER CODE END 6 */

  129. }

  130. #endif

  131. /**
  132.   * @}
  133.   */

  134. /**
  135.   * @}
  136. */

  137. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復(fù)制代碼



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

使用道具 舉報(bào)

沙發(fā)
ID:129745 發(fā)表于 2016-7-8 21:24 | 只看該作者
下載不了,暈
回復(fù)

使用道具 舉報(bào)

板凳
ID:141412 發(fā)表于 2016-10-6 09:18 | 只看該作者
來學(xué)習(xí)了~
回復(fù)

使用道具 舉報(bào)

地板
ID:206752 發(fā)表于 2017-6-1 16:15 | 只看該作者
下載來看看,,,,,
回復(fù)

使用道具 舉報(bào)

5#
ID:123924 發(fā)表于 2018-1-7 02:28 | 只看該作者
為保存而回復(fù)
回復(fù)

使用道具 舉報(bào)

6#
ID:161151 發(fā)表于 2018-4-21 21:07 | 只看該作者
謝謝分享,學(xué)習(xí)中
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩专区 | 日韩欧美1区2区 | 国产精品18hdxxxⅹ在线 | 一级做a爰片性色毛片16美国 | 国产视频久久久 | 亚洲免费在线视频 | 青青草视频免费观看 | 国产成人精品一区二区三区 | 亚洲国产成人精品女人久久久 | 欧美日韩高清免费 | www久久久 | 亚洲a人| 亚洲高清av在线 | 国产精品视频一区二区三区不卡 | 一级做受毛片免费大片 | 一区二区三区中文字幕 | 国产女人与拘做受免费视频 | 国产精品久久久久久久久久久新郎 | 久久精品小短片 | 在线观看免费毛片 | 亚洲成人久久久 | 国产高清一区二区三区 | 日日摸日日碰夜夜爽2015电影 | 午夜精品一区二区三区在线播放 | 97精品国产手机 | 国产日产欧产精品精品推荐蛮挑 | 亚洲精品一区二区网址 | 久草免费电影 | 一级黄在线观看 | 久久亚洲欧美日韩精品专区 | 国产成人精品免费视频大全最热 | a级毛片毛片免费观看久潮喷 | 亚洲成av人片在线观看无码 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 精品乱码一区二区三四区 | 精品福利在线视频 | 日韩色图在线观看 | 欧美极品在线播放 | 国产精品午夜电影 | 四虎成人免费视频 | 亚洲精品无人区 |