国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ARM開發(fā),stm32mp157a-A7核SPI總線實(shí)驗(yàn)(實(shí)現(xiàn)數(shù)碼管的顯示)

這篇具有很好參考價(jià)值的文章主要介紹了ARM開發(fā),stm32mp157a-A7核SPI總線實(shí)驗(yàn)(實(shí)現(xiàn)數(shù)碼管的顯示)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.目標(biāo):

? ? ? ? a.數(shù)碼管顯示相同的值 0000 1111 ......9999;
? ? ? ? b.數(shù)碼管顯示不同的值 1234;

2.分析m74hc595芯片內(nèi)部框圖;

ARM開發(fā),stm32mp157a-A7核SPI總線實(shí)驗(yàn)(實(shí)現(xiàn)數(shù)碼管的顯示),ARM,arm開發(fā),stm32,嵌入式硬件,c語言

?真值表:

ARM開發(fā),stm32mp157a-A7核SPI總線實(shí)驗(yàn)(實(shí)現(xiàn)數(shù)碼管的顯示),ARM,arm開發(fā),stm32,嵌入式硬件,c語言

3.代碼;

---spi.h頭文件---
#ifndef __SPI_H__
#define __SPI_H__

#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"

// MOSI對(duì)應(yīng)的引腳輸出高低電平的信號(hào)
#define  MOSI_OUTPUT_H()	do{GPIOE->ODR |= (0x1 << 14);}while(0)
#define  MOSI_OUTPUT_L()    do{GPIOE->ODR &= (~(0x1 << 14));}while(0)

// 對(duì)應(yīng)595芯片的鎖存引腳輸出高低電平
#define  NSS_OUTPUT_H()	    do{GPIOE->ODR |= (0x1 << 11);}while(0)
#define  NSS_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 11));}while(0)
	
// 時(shí)鐘信號(hào)對(duì)應(yīng)的引腳輸出高低電平
#define  SCK_OUTPUT_H()     do{GPIOE->ODR |= (0x1 << 12);}while(0)
#define  SCK_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 12));}while(0)

/*
 * 函數(shù)功能: SPI初始化函數(shù),推挽輸出,高速,禁止上拉和下拉
 * 函數(shù)參數(shù):無
 * 函數(shù)返回值:無
*/
void SPI_init(void);
/*
 * 函數(shù)功能:SPI發(fā)送數(shù)據(jù)的函數(shù)
 * 函數(shù)參數(shù):dat : 要發(fā)送的數(shù)據(jù)
 * 函數(shù)返回值:無
 *
*/
void SPI_write(unsigned char dat);


#endif  // __SPI_H__
---spi.c函數(shù)文件---
#include "spi.h"
/* SPI4_NSS 	---->   PE11
 * SPI4_SCK     ---->   PE12
 * SPI4_MOSI    ---->   PE14
 * SPI4_MISO    ---->   PE13
 * */

/* 數(shù)碼管的編碼, 先發(fā)送低位,在發(fā)送高位
 * A B C D E F G DP
 * 1 1 1 1 1 1 0 0    0xFC   0
 * 0 1 1 0 0 0 0 0    0x60   1
 * 1 1 0 1 1 0 1 0    0xDA   2
 * 1 1 1 1 0 0 1 0    0xF2   3
 * 0 1 1 0 0 1 1 0    0x66   4
 * 1 0 1 1 0 1 1 0    0xB6   5 
 * 1 0 1 1 1 1 1 0    0xBE   6
 * 1 1 1 0 0 0 0 0    0xE0   7
 * 1 1 1 1 1 1 1 0    0xFE   8
 * 1 1 1 1 0 1 1 0    0xF6   9
 * */
void delay_us1(unsigned int us)
{
	int i,j;
	for(i = 0; i < us;i++)
		for (j = 0; j < 1;j++);
}

void SPI_init(void)
{
	RCC->MP_AHB4ENSETR |= (0x1 << 4);
	// MOSI    PE14 
	GPIOE->MODER &= (~(0x3 << 28));
	GPIOE->MODER |= (0x1 << 28);
	GPIOE->OTYPER &= (~(0x1 << 14));
	GPIOE->OSPEEDR &= (~(0x3 << 28));
	GPIOE->PUPDR &= (~(0x3 << 28));
	// MISO    PE13
	GPIOE->MODER &= (~(0x3 << 26));
	GPIOE->OSPEEDR &= (~(0x3 << 26));
	GPIOE->PUPDR &= (~(0x3 << 26));
	// SCK     PE12	
	GPIOE->MODER &= (~(0x3 << 24));
	GPIOE->MODER |= (0x1 << 24);
	GPIOE->OTYPER &= (~(0x1 << 12));
	GPIOE->OSPEEDR &= (~(0x3 << 24));
	GPIOE->PUPDR &= (~(0x3 << 24));
	// NSS     PE11
	GPIOE->MODER &= (~(0x3 << 22));
	GPIOE->MODER |= (0x1 << 22);
	GPIOE->OTYPER &= (~(0x1 << 11));
	GPIOE->OSPEEDR &= (~(0x3 << 22));
	GPIOE->PUPDR &= (~(0x3 << 22));
	NSS_OUTPUT_L();    // 595芯片的鎖存引腳拉低
	SCK_OUTPUT_L();    // SPI的時(shí)鐘線拉低
}

void SPI_write(unsigned char dat)
{
	//1.for循環(huán) 
	unsigned char i;
	for(i=0; i<8; i++)
	{
		if(dat & 0x01)	//先發(fā)低位,再發(fā)高位
			MOSI_OUTPUT_H();  //發(fā)1
		else
			MOSI_OUTPUT_L();  //發(fā)0
		
		dat >>= 1;

		//移位寄存器時(shí)鐘,上升沿
		SCK_OUTPUT_L();
		delay_us1(10);
		SCK_OUTPUT_H();
		delay_us1(10);
	}	
}



---main.c測試文件---
#include "spi.h"

extern void printf(const char *fmt, ...);

void delay_ms(int ms)

{
	int i,j;
	for(i = 0; i < ms;i++)
    	for (j = 0; j < 1800; j++);
}


int num[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};

int main()
{
	SPI_init();

	//實(shí)驗(yàn)1:0000 1111 .... 9999
	unsigned char i;

	while(1)
	{
	/*	for(i=0; i<10; i++)	
		{
			//循環(huán)條
			SPI_write(0xF0);   //傳位
			SPI_write(num[i]);   //傳段

			//鎖存時(shí)鐘上升沿,鎖存器數(shù)據(jù)才會(huì)變化
			NSS_OUTPUT_L();
			delay_ms(10);
			NSS_OUTPUT_H();
			delay_ms(10);
		}

		*/
		
/        /實(shí)驗(yàn)2:1234
		for(i=0; i<4; i++)
		{
			SPI_write(0x80 >> i);
			SPI_write(num[i+1]);

			//鎖存時(shí)鐘上升沿,鎖存器數(shù)據(jù)才會(huì)變化
			NSS_OUTPUT_L();
			delay_ms(1);
			NSS_OUTPUT_H();

		}
	}
	return 0;

}

4.運(yùn)行結(jié)果;

a.數(shù)碼管顯示相同的值 0000 1111 ......9999;

ARM開發(fā),stm32mp157a-A7核SPI總線實(shí)驗(yàn)(實(shí)現(xiàn)數(shù)碼管的顯示),ARM,arm開發(fā),stm32,嵌入式硬件,c語言

b.數(shù)碼管顯示不同的值 1234;

ARM開發(fā),stm32mp157a-A7核SPI總線實(shí)驗(yàn)(實(shí)現(xiàn)數(shù)碼管的顯示),ARM,arm開發(fā),stm32,嵌入式硬件,c語言文章來源地址http://www.zghlxwxcb.cn/news/detail-669839.html

到了這里,關(guān)于ARM開發(fā),stm32mp157a-A7核SPI總線實(shí)驗(yàn)(實(shí)現(xiàn)數(shù)碼管的顯示)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 驅(qū)動(dòng)開發(fā),stm32mp157a開發(fā)板的led燈控制實(shí)驗(yàn)

    驅(qū)動(dòng)開發(fā),stm32mp157a開發(fā)板的led燈控制實(shí)驗(yàn)

    ????????編寫LED燈的驅(qū)動(dòng),在應(yīng)用程序中編寫控制LED燈亮滅的代碼邏輯實(shí)現(xiàn)LED燈功能的控制; LED1-PE10 LED1亮滅: RCC寄存器[4]-1 0X50000A28 GPIOE_MODER[21:20]-01 (輸出) 0X50006000 GPIOE_ODR[10]-1(輸出高電平) 0(輸出低電平)0X50006014 LED2-PF10 LED2亮滅: RCC寄存器[5]-1 0X50000A28 GPIOE_MODER[21:20]

    2024年02月09日
    瀏覽(24)
  • arm學(xué)習(xí)stm32之spi總線數(shù)碼管倒計(jì)時(shí),裸機(jī)開發(fā),soc

    arm學(xué)習(xí)stm32之spi總線數(shù)碼管倒計(jì)時(shí),裸機(jī)開發(fā),soc

    由于時(shí)間沒有用時(shí)間計(jì)時(shí)器操作,有些誤差,后續(xù)有空會(huì)翻新計(jì)時(shí)器版本 main.c spi.c spi.h

    2024年02月16日
    瀏覽(19)
  • cortex-A7核PWM實(shí)驗(yàn)--STM32MP157

    cortex-A7核PWM實(shí)驗(yàn)--STM32MP157

    實(shí)驗(yàn)?zāi)康模候?qū)動(dòng)風(fēng)扇,蜂鳴器,馬達(dá)進(jìn)行工作 目錄 一,PWM相關(guān)概念 有源蜂鳴器和無源蜂鳴器 二,分析電路圖,框圖 三,分析RCC章節(jié) 1,確定總線連接 2,根據(jù)總線內(nèi)容確定基地址 3.分析RCC章節(jié)所需寄存器 1,RCC_MP_AHB4ENSETR寄存器 2,RCC_MP_APB1ENSETR寄存器 四,分析GPIO章節(jié)寄存器

    2024年02月11日
    瀏覽(32)
  • cortex-A7核IIC實(shí)驗(yàn)--STM32MP157AAA

    cortex-A7核IIC實(shí)驗(yàn)--STM32MP157AAA

    實(shí)驗(yàn)?zāi)康模翰杉瘻貪穸葌鞲衅髦?1.同步串行半雙工總線,主要用于鏈接整體電路,硬件結(jié)構(gòu)簡單,接口連接方便,成本較低 2.兩線制,只有兩根雙向信號(hào)線,數(shù)據(jù)線SDA,時(shí)鐘線SCL 3.IIC傳輸速率:1)低速:100k ,2)400k,全速:3.4M 4.總線外接兩個(gè)上拉電阻:在總線處于空閑狀態(tài)時(shí)

    2024年02月11日
    瀏覽(24)
  • STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(中斷)

    STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(中斷)

    對(duì)于使用中斷的按鍵驅(qū)動(dòng),內(nèi)核自帶的驅(qū)動(dòng)程序 drivers/input/keyboard/gpio_keys.c 就可以,需要做的只是修改設(shè)備樹指定引腳及鍵值 中斷是引入其他基礎(chǔ)知識(shí)的前提:休眠-喚醒、POLL 機(jī)制、異步通知、定時(shí)器、中斷的線程化處理都離不開中斷 設(shè)備樹相關(guān) 查看原理圖確定按鍵使用的

    2024年02月15日
    瀏覽(29)
  • STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(異步通知)

    STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(異步通知)

    Linux 系統(tǒng)中也有很多信號(hào),在 Linux 內(nèi)核源文件 includeuapiasm-genericsignal.h 中,有很多信號(hào)的宏定義: 就 APP 而言,你想處理 SIGIO 信息,那么需要提供信號(hào)處理函數(shù),并且要跟 SIGIO 掛鉤。這可以通過一個(gè) signal 函數(shù) 來“給某個(gè)信號(hào)注冊(cè)處理函數(shù)”,用法如下: 重點(diǎn)從②開始:

    2024年02月15日
    瀏覽(20)
  • STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(工作隊(duì)列)

    STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(工作隊(duì)列)

    定時(shí)器、下半部 tasklet,它們都是在中斷上下文中執(zhí)行,它們無法休眠。當(dāng)要處理更復(fù)雜的事情時(shí),往往更耗時(shí)。這些更耗時(shí)的工作放在定時(shí)器或是下半部中,會(huì)使得系統(tǒng)很卡;并且循環(huán)等待某件事情完成也太浪費(fèi)CPU 資源了。如果使用線程來處理這些耗時(shí)的工作,那就可以解

    2024年02月15日
    瀏覽(25)
  • STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(tasklet)

    STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(tasklet)

    閱讀Linux 系統(tǒng)中異常與中斷可知,Linux 系統(tǒng)對(duì)中斷處理的演進(jìn)過程中,實(shí)現(xiàn)了中斷的擴(kuò)展:硬件中斷、軟件中斷 硬件中斷有:GPIO,網(wǎng)絡(luò)中斷(net),系統(tǒng)滴答中斷(tick)等 軟件中斷有:定時(shí)器,tasklet等 內(nèi)核中的軟中斷: 該數(shù)組里面有個(gè)action成員,該成員是個(gè)函數(shù),函數(shù)會(huì)調(diào)

    2024年02月14日
    瀏覽(80)
  • STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(POLL 機(jī)制)

    STM32MP157驅(qū)動(dòng)開發(fā)——按鍵驅(qū)動(dòng)(POLL 機(jī)制)

    使用休眠-喚醒的方式等待某個(gè)事件發(fā)生時(shí),有一個(gè)缺點(diǎn):等待的時(shí)間可能很久。我們可以加上一個(gè)超時(shí)時(shí)間,這時(shí)就可以使用 poll 機(jī)制。 ① APP 不知道驅(qū)動(dòng)程序中是否有數(shù)據(jù),可以先調(diào)用 poll 函數(shù)查詢一下,poll 函數(shù)可以傳入超時(shí)時(shí)間; ② APP 進(jìn)入內(nèi)核態(tài), 調(diào)用到驅(qū)動(dòng)程序的

    2024年02月15日
    瀏覽(19)
  • STM32MP157驅(qū)動(dòng)開發(fā)——LED驅(qū)動(dòng)(原始架構(gòu))

    STM32MP157驅(qū)動(dòng)開發(fā)——LED驅(qū)動(dòng)(原始架構(gòu))

    LED 的驅(qū)動(dòng)方式,常見的有四種。 ① 使用引腳輸出 3.3V 點(diǎn)亮 LED,輸出 0V 熄滅 LED。 ② 使用引腳拉低到 0V 點(diǎn)亮 LED,輸出 3.3V 熄滅 LED。 ③ 使用引腳輸出 1.2V 點(diǎn)亮 LED,輸出 0V 熄滅 LED。 ④ 使用引腳輸出 0V 點(diǎn)亮 LED,輸出 1.2V 熄滅 LED。 有的芯片為了省電等原因,其引腳驅(qū)動(dòng)能力

    2024年02月03日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包